P3531 [POI2012]LIT-Letters

2024-03-04 07:32
文章标签 lit letters poi2012 p3531

本文主要是介绍P3531 [POI2012]LIT-Letters,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

求逆序对怎么能少了线段树呢.
建一棵权值线段树,倒着将每个数放入,每放入一个数之前先查询这颗线段树内有多少比它小的数,最后统计起来(注意用long long),废话不多说,直接上代码.

#include<bits/stdc++.h>
#define rap(i,first,last) for(int i=first;i<=last;++i)
#define sing(i,first,last) for(int i=first;i>=last;--i)
#define Lson now*2
#define Rson now*2+1
#define Middle (left+right)/2
#define Left Lson,left,Middle
#define Right Rson,Middle+1,right
using namespace std;
const int maxN=1e6+7;
int N,M;
char A[maxN],B[maxN];
int tree[maxN*4];
void PushUp(int now)//合并
{tree[now]=tree[Lson]+tree[Rson];
}
void Build(int now=1,int left=1,int right=N)//建树,没什么用
{if(left==right){tree[now]=0;return;}Build(Left);Build(Right);PushUp(now);
}
void UpData(int num,int now=1,int left=1,int right=N)//单点修改
{if(num<left||num>right)return;//不在范围内则退出if(left==right){tree[now]++;//叶节点时加一return;}UpData(num,Left);//修改左子树UpData(num,Right);//修改右子树PushUp(now);//合并
}
int Query(int num,int now=1,int left=1,int right=N)
{if(left>=num)return 0;//如果最小值也比查询的值也要大(相等)了就退出if(right<num)return tree[now];//如果最大值也比它小就直接返回return Query(num,Left)+Query(num,Right);//左右子树的值相加
}
int arr[26][maxN];
int cnt[26];
int brr[maxN];
int main()
{scanf("%d%s%s",&N,A,B);rap(i,0,N-1)arr[A[i]-'A'][++cnt[A[i]-'A']]=i+1;//因为相同时两个数自然是不会交换的,可见这是一个稳定的排序,所以记录下每个字母的位置依次带入b数组就可以了rap(i,0,25)cnt[i]=0;rap(i,0,N-1){brr[i+1]=arr[B[i]-'A'][++cnt[B[i]-'A']];}long long answer=0;sing(i,N,1){answer+=Query(brr[i]);//每个数的逆序对个数相加UpData(brr[i]);//加入这个数}printf("%lld",answer);//输出answerreturn 0;
}

这篇关于P3531 [POI2012]LIT-Letters的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/772462

相关文章

Codeforces 443A Anton and Letters(水题)

题目链接:Codeforces 443A Anton and Letters 题目大意:给出一个字母的集合,问说有多少个不同的元素。 解题思路:水题。 #include <cstdio>#include <cstring>const int N = 1005;int n, v[N];char s[N];int main () {int ans = 0;memset(v, 0, si

柏林自由大学研究团队《Ecology Letters 》揭示AMF在植物对全球变化响应的作用

全球环境变化正在影响陆生植物生长。植物已经进化出各种策略来应对这些挑战,其中之一是与丛枝菌根真菌(AMF)形成共生关系(高达80%的陆生植物物种)。AMF为寄主植物提供各种益处,例如营养吸收、耐受性、食草动物防御和抗病能力,以换取糖和脂质(New Phytologist 最新 | 丛枝菌根真菌介导的土壤有机质动态过程的新概念框架;GCB | 南农生态系统生态学课题组提出丛枝菌根真菌对土壤养

1,create-react-app 创建文件名踩雷:name can no longer contain capital letters

如图提示,创建文件名报错。 错误提示: create-react-app创建文件名时, 文件名不能有大写字母。 更正如下: 可以看到,现在就能正常创建了。

P3535 [POI2012] TOU-Tour de Byteotia

[P3535 POI2012] TOU-Tour de Byteotia - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 用并查集进行判环。先将 u ≥ k u \ge k u≥k且 v ≥ k v \ge k v≥k的边进行合并。之后再遍历一遍全部边,若边中点存在小于等于 k k k的,如果两点父结点指向不同不用删除并进行合并,否则需要进行删除。 代码如下: #inclu

CF899F Letters Removing 题解

CF899F Letters Removing 题解 这好像是个典题。 解法 一个很自然的想法。 考虑开 62 62 62 颗平衡树,即每一种字符都开一颗平衡树,维护的是每种字符出现的位置,每次操作就把对应的平衡树区间删去即可,是很基础的非旋 treap 操作。 实现就是按值分裂。 inline std::pair<fhq_node *,fhq_node *> split(fhq_n

如何在FBX剔除Lit.shader依赖

1)如何在FBX剔除Lit.shader依赖 2)Unity出AAB包(PlayAssetDelivery)模式下加载资源过慢问题 3)如何在URP中正确打出Shader变体 4)XLua打包Lua文件粒度问题 这是第371篇UWA技术知识分享的推送,精选了UWA社区的热门话题,涵盖了UWA问答、社区帖子等技术知识点,助力大家更全面地掌握和学习。 Asset Q:测试发现只能通过后处

Leetcode 848. Shifting Letters [Python]

注意加和的数字要Mod 26,以及之后和当前字母的ord值加和后要减去a的ord值然后再Mod 26再加a的ord值,并转化回字母去。 class Solution:def shiftingLetters(self, s: str, shifts: List[int]) -> str:shifts = shifts[::-1]prefix = [shifts[0]]for i in range(

Leetcode 848. Shifting Letters [Python]

注意加和的数字要Mod 26,以及之后和当前字母的ord值加和后要减去a的ord值然后再Mod 26再加a的ord值,并转化回字母去。 class Solution:def shiftingLetters(self, s: str, shifts: List[int]) -> str:shifts = shifts[::-1]prefix = [shifts[0]]for i in range(

POI2012 PRE-Prefixuffix

P3546 [POI2012] PRE-Prefixuffix 题目大意 对于两个字符串 S 1 , S 2 S_1,S_2 S1​,S2​,如果将 S 1 S_1 S1​的一个后缀移动到开头后这个字符串变成了 S 2 S_2 S2​,则称 S 1 , S 2 S_1,S_2 S1​,S2​循环同构。 给定一个长度为 n n n的字符串 S S S,求满足下面条件的最大的 L L L:

917. Reverse Only Letters

917. 仅仅反转字母 给定一个字符串 S,返回 “反转后的” 字符串,其中不是字母的字符都保留在原地,而所有字母的位置发生反转。   示例 1: 输入:"ab-cd"输出:"dc-ba" 示例 2: 输入:"a-bC-dEf-ghIj"输出:"j-Ih-gfE-dCba" 示例 3: 输入:"Test1ng-Leet=code-Q!"输出:"Qedo1ct-eeLg=nt