对于数的范围比较小,我们可以这样来求解逆序对。 树状数组b[val]表示的是val在数组中出现的次数。 我们倒序扫描原数组a,对于位置i,由于树状数组里面保存的是val出现的次数,我们先用树状数组求出当前树状数组中比a[i]这个值小的元素的个数,由于是倒序扫描,之前加入树状数组中的数的位置都在i后面 ...
分类:
编程语言 时间:
2019-03-16 19:15:01
阅读次数:
159
$ \color{ 0066ff}{ 题目描述 }$ 「Hanabi, hanabi……」 一听说祭典上没有烟火,Karen 一脸沮丧。 「有的哦…… 虽然比不上大型烟花就是了。」 还好 Shinobu 早有准备,Alice、Ayaya、Karen、Shinobu、Yoko 五人又能继续愉快地玩耍啦 ...
分类:
编程语言 时间:
2019-03-05 15:40:49
阅读次数:
312
#include void Merge(int ,int ,int ); void mergeSort(int ,int ); int ch[20000],temp[20000]; int count = 0; void mergeSort(int lo,int hi) { if(lo ch[j])... ...
分类:
编程语言 时间:
2019-02-25 23:17:21
阅读次数:
225
题目:Minimum Inversion Number 链接:http://acm.hdu.edu.cn/showproblem.php?pid=1394 分析: 1)先对序列求逆序对的数目,归并排序,线段树,树状数组都可以。 2)考虑到这是一个[0,n)的排列,全体加一,变成一个[1,n]的排列。 ...
分类:
其他好文 时间:
2019-02-01 22:58:34
阅读次数:
258
ci 的意思是在前lowbit 中元素的个数。 然后往前i个中的sum就是小于等于这个i的个数 这个数的位置-小于等于这个i的个数 就是前面大于这个数的个数 小于等于这个数的个数肯定比 这个数的位置要小。 1 #include<iostream> 2 #include<cstdio> 3 #incl ...
分类:
编程语言 时间:
2019-01-25 13:03:14
阅读次数:
175
题目链接:https://vjudge.net/problem/POJ-2299 推荐讲解树状数组的博客:https://blog.csdn.net/int64ago/article/details/7429868 题目意思就是让我们把无序的一些数字经过相邻数字间两两交换,最后变成不递减的数字。我们 ...
分类:
编程语言 时间:
2019-01-13 18:04:47
阅读次数:
199
被锤爆了 被这个题搞得自闭了一上午,觉得自己没什么前途了 我又没有看出来这个题的一个非常重要的性质 我们填进去的数一定是单调不降的 首先如果填进去的数并不是单调不降的,那么填进去本身就会产生一些逆序对,感性理解好像是单调不降更优,这里还是严谨证明一下吧 考虑一下树状数组求逆序对的过程,显然就是求出每 ...
分类:
其他好文 时间:
2019-01-01 21:18:58
阅读次数:
209
又是一道树状数组求逆序对的题目。 这一题我们可以将第二个串中的每一个字母,与第一个串中的字母做两两匹配,令第二个串第i个字母的值id[i]为该字母与第一个串中的字母匹配到的位置。 然后考虑到所求答案为最小的移动次数,那么这个最小的移动次数显然为序列id的逆序对个数。 树状数组求一求就没了。 我一看时 ...
分类:
编程语言 时间:
2018-11-03 23:13:21
阅读次数:
200
求逆序对个数的三种方法 逆序对: 对于一个序列 $a_1$,$a_2$,$a_3$..$a_n$,如果存在$a_i$ $a_j$且i using namespace std; const int maxn=1e6+10; template void read(T&res) { char ch=get ...
分类:
编程语言 时间:
2018-11-02 23:49:57
阅读次数:
224