题意:给你n个可以重复的无序数列,问经过k次相邻交换后最少还有多少对逆序数
求逆序对可以用树状数组来做,对于重复的元素,可能在sort的时候交换编号
求和的时候要注意去重,还有一种方法就是稳定排序stable_sort
#include
#include
#include
using namespace std;
#define ll __int64
#define N 100000+10
...
分类:
编程语言 时间:
2015-04-14 10:01:37
阅读次数:
132
#1141 : 二分·归并排序之逆序对
时间限制:10000ms
单点时限:1000ms
内存限制:256MB
描述
在上一回、上上回以及上上上回里我们知道Nettle在玩《艦これ》。经过了一番苦战之后,Nettle又获得了的很多很多的船。
这一天Nettle在检查自己的舰队列表:
[list.png]
我们可以看到,船默认排序是以等级为参数。但实际上一个船的火力值和等级的...
分类:
编程语言 时间:
2015-04-13 09:37:51
阅读次数:
214
思路:由于只能交换相邻的数,所以每次最多减小1个逆序对(且如果存在逆序对那么肯定可以减小1个)!于是乎。。就是统计逆序对的裸题了。树状数组或归并都行。 1 #pragma comment(linker, "/STACK:10240000,10240000") 2 3 #include 4 #in.....
分类:
其他好文 时间:
2015-04-12 06:44:26
阅读次数:
117
Problem地址:http://poj.org/problem?id=2299这题题意:给一对序列,通过调换相邻元素位置的方法,将一组无序数据排序成递增有序数据。这里有一个结论:通过调换相邻元素位置的方法,将一组无序数据排序成递增有序数据的最小调换次数为此组数据中逆序对的对数。这里不证明这个结论。...
分类:
其他好文 时间:
2015-04-11 23:49:47
阅读次数:
117
原题地址又是一道WA成狗的题,最后发现原来是结果溢出了。。代码: 1 #include 2 #include 3 4 using namespace std; 5 6 #define MAX_N 100008 7 8 int N; 9 long long a[MAX_N];10 long ...
分类:
编程语言 时间:
2015-04-11 00:01:51
阅读次数:
345
题意 给你一个数组求其中逆序对(ia[j])
的个数
我们来看一个归并排序的过程:
给定的数组为[2, 4, 5, 3, 1],二分后的数组分别为[2, 4, 5], [1, 3],假设我们已经完成了子过程,现在进行到该数组的“并”操作:
a: [2, 4, 5]
b: [1, 3]
result:[1]
选取b数组的1...
分类:
编程语言 时间:
2015-04-10 22:27:00
阅读次数:
191
Description
对于序列A,它的逆序对数定义为满足i\gtAj的数对(i,j)的个数。给1到n的一个排列,按照某种顺序依次删除m个元素,你的任务是在每次删除一个元素之前统计整个序列的逆序对数。
Input
输入第一行包含两个整数n和m,即初始元素的个数和删除的元素个数。以下n行每行包含一个1到n之间的正整数,即初始排列。以下m行每行一个正整数,依次为每次删除的元素。...
分类:
其他好文 时间:
2015-04-09 12:01:24
阅读次数:
123
描述在上一回、上上回以及上上上回里我们知道Nettle在玩《艦これ》。经过了一番苦战之后,Nettle又获得了的很多很多的船。这一天Nettle在检查自己的舰队列表:我们可以看到,船默认排序是以等级为参数。但实际上一个船的火力值和等级的关系并不大,所以会存在A船比B船等级高,但是A船火力却低于B船这...
分类:
编程语言 时间:
2015-04-04 16:44:15
阅读次数:
190
描述
给定一段 n(n≤50000) 个数的序列, m(m≤50000) 次询问 [L, R] 区间内相邻元素两两交换使得序列不降的最少次数.
分析
首先转化为一个逆序对的问题, 最少交换的次数就是逆序对的个数. 后面的证明说的不严谨甚至可能是错的, 不过可以作为启发和参考吧 : 对于序列中的一个元素x, 其后面比它小的元素有c个, 讨论它后面第一个元素y的值, 如果y比x小...
分类:
编程语言 时间:
2015-04-04 13:44:46
阅读次数:
112
我们知道,求逆序对最典型的方法就是树状数组,但是还有一种方法就是Merge_sort(),即归并排序。实际上归并排序的交换次数就是这个数组的逆序对个数,为什么呢?我们可以这样考虑:归并排序是将数列a[l,h]分成两半a[l,mid]和a[mid+1,h]分别进行归并排序,然后再将这两半合并起来。在合...
分类:
编程语言 时间:
2015-04-04 11:52:14
阅读次数:
194