对于数的范围比较小,我们可以这样来求解逆序对。 树状数组b[val]表示的是val在数组中出现的次数。 我们倒序扫描原数组a,对于位置i,由于树状数组里面保存的是val出现的次数,我们先用树状数组求出当前树状数组中比a[i]这个值小的元素的个数,由于是倒序扫描,之前加入树状数组中的数的位置都在i后面 ...
分类:
编程语言 时间:
2019-03-16 19:15:01
阅读次数:
159
// 面试题51:数组中的逆序对 // 题目:在数组中的两个数字如果前面一个数字大于后面的数字,则这两个数字组 // 成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。 #include using namespace std; int InversePairsCore(int* data,... ...
分类:
编程语言 时间:
2019-03-14 00:30:03
阅读次数:
176
设一个序列为: a[0], a[1], ..., a[n-1],一个逆序对是指:{ (a[i], a[j]) | a[i] > a[j], i < j }。 统计一个序列中的逆序对个数,可以使用冒泡排序法、二路归并法等。这里介绍利用冒泡排序统计逆序对个数的方法。 核心思想:冒泡排序中,每进行一次交换 ...
分类:
编程语言 时间:
2019-03-10 00:01:31
阅读次数:
546
$ \color{ 0066ff}{ 题目描述 }$ 「Hanabi, hanabi……」 一听说祭典上没有烟火,Karen 一脸沮丧。 「有的哦…… 虽然比不上大型烟花就是了。」 还好 Shinobu 早有准备,Alice、Ayaya、Karen、Shinobu、Yoko 五人又能继续愉快地玩耍啦 ...
分类:
编程语言 时间:
2019-03-05 15:40:49
阅读次数:
312
传送门 很早很早以前的题了 今天突然开心 就来补一片题解 主要还是写归并排序的 ...
分类:
其他好文 时间:
2019-03-04 21:00:10
阅读次数:
219
#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
题目传送门 思路: 区间合并线段树的题,第一次写,对于一颗子树,无论这个子树怎么交换,都不会对其他子树的逆序对造成影响,所以就直接算逆序对就好。 注意叶子节点是1到n的全排列,所以每个权值都只会出现1次,合并很好写。 注意动态开点,最多n个叶子节点,然后每次查询用到log个子树节点,(这句话似乎有语 ...
分类:
其他好文 时间:
2019-02-23 01:00:25
阅读次数:
215
首先,偏序是什么 一维偏序就是数列中对于每个$x$有多少个$a\leq x$ 二维偏序就是二元组$(x,y)$有多少$(a,b)$满足$a\leq x \wedge b\leq y$ ... 一维偏序可以直接排序 二维偏序联想到逆序对可以给第一位排序第二维数据结构 三维偏序第一维排序第二维cdq分治 ...
分类:
其他好文 时间:
2019-02-15 15:59:49
阅读次数:
157
K个逆序对数组 给出两个整数 n 和 k,找出所有包含从 1 到 n 的数字,且恰好拥有 k 个逆序对的不同的数组的个数。 逆序对的定义如下:对于数组的第i个和第 j个元素,如果满i < j且 a[i] > a[j],则其为一个逆序对;否则不是。 由于答案可能很大,只需要返回 答案 mod 109 ...
分类:
编程语言 时间:
2019-02-15 01:12:14
阅读次数:
317
/* 给定一个数组,要求和小于t的段落总数 求前缀和 dp[i]表示以第i个数为结尾的小于t的段落总数,sum[i]-sum[l] using namespace std; #define ll long long #define maxn 200005 ll tmp[maxn],n,a[maxn]... ...
分类:
编程语言 时间:
2019-02-14 00:16:58
阅读次数:
225