BrainmanBrainmanhttp://poj.org/problem?id=1804求逆序数,用归并写的,不知道什么叫树状数组,以后看了再尝试} else if (aux[i] > aux[j]) { sum += end1-i+1; a[t] = aux[j++];} else { a[t...
分类:
其他好文 时间:
2015-04-01 19:35:34
阅读次数:
117
题意查询给定[L, R]区间内 逆序对数 ==k的子区间的个数。我们只需要求出 子区间小于等于k的个数和小于等于k-1的个数,然后相减就得出答案了。对于i(1≤i≤n),我们计算ri表示[i,ri]的逆序对数小于等于K,且ri的值最大。(ri对应代码中的cnt数组)显然ri单调不降,我们可以通过用两...
分类:
编程语言 时间:
2015-04-01 19:20:28
阅读次数:
234
首先,明确两个概念:
逆序对:数列a[1],a[2],a[3]…中的任意两个数a[i],a[j] (ia[j],那么我们就说这两个数构成了一个逆序对.
逆序数:一个数列中逆序对的总数.
例题一:POJ 1804. 点击打开链接
解题思路:每次交换只能减少一个逆序,而且必定能减少一个逆序,从而问题就转换为求逆序个数了。这题数据规模很小,暴力可过。
我这里提供了用Merge_sort的方...
分类:
编程语言 时间:
2015-03-31 18:07:05
阅读次数:
142
题目连接:点击打开链接
解题思路:
逆序数模板题。注意此题坑点在于数据大,开成unsigned long long
完整代码:
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
typedef unsigned long l...
分类:
其他好文 时间:
2015-03-31 18:03:28
阅读次数:
177
以前一般用树状数组和线段树做这种题
这次换个思路试试,归并排序!
#include
#include
#include
using namespace std;
typedef long long LL;
const int maxn = 111111;
int n;
int array[maxn];
int tmp[maxn];
LL ans;
void my_sort(int l,int...
分类:
编程语言 时间:
2015-03-31 17:59:25
阅读次数:
194
题意:对于一个序列,两个人轮流玩游戏 ,第一个人先玩,它会交换选择相邻的并且交换,第二个后玩,他有0各有.5的机会使得逆序数加一或者加一,序列单调递增时结束,第一个人总想要玩得步数最小,那么步数的期望值是多少。解题思路:原来是个数学题 哭了。解题代码: 1 // File Name: 351b.cp...
分类:
其他好文 时间:
2015-03-29 17:54:08
阅读次数:
136
题意: 输入一个长度 n 第二行给出长度为n的数组,数组的值刚好为0到n-1这n个数。 然后每次把数组的第一个数放到最后一个,放n-1次,共有n个排列,这n个排列就有n个逆序数,输出这n个逆序数的最小值。我的做法:1、每次输入a[i]后,都把a[i] ++;2、求出第一个排列的逆序数3、递...
分类:
编程语言 时间:
2015-03-21 12:32:52
阅读次数:
130
Minimum Inversion Number(线段树单点更新+逆序数)
Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d
& %I64u
Submit Status
Description
The inversion number of a given number se...
分类:
其他好文 时间:
2015-03-20 22:10:57
阅读次数:
145
历届试题 小朋友排队
时间限制:1.0s 内存限制:256.0MB
问题描述
n 个小朋友站成一排。现在要把他们按身高从低到高的顺序排列,但是每次只能交换位置相邻的两个小朋友。
每个小朋友都有一个不高兴的程度。开始的时候,所有小朋友的不高兴程度都是0。
如果某个小朋友第一次被要求交换,则他的不高兴程度增加1,如果第二次要求他...
分类:
编程语言 时间:
2015-03-19 22:03:47
阅读次数:
215
求逆序数,快排 public static void acm1007(int a, string[] c) { Dictionary dic = new Dictionary(); int[] i = new int[a]; ...