题意:给一个排列的每个前缀区间的逆序对数,让还原 原序列。思路:考虑逆序对的意思,对于k = f[i] - f[i -1],就表示在第i个位置前面有k个比当前位置大的数,那么也就是:除了i后面的数字之外,它是在剩下的数字当中第k+1大的。知道这个之后,可以用树状数组来帮助找出剩下的数中第k大的数,刚...
分类:
编程语言 时间:
2015-12-10 16:46:11
阅读次数:
172
题目简述:有一个全排列,一直每个前缀区间的逆序对数,还原这个排列。fi记录逆序对数,pi记录该位置数值,则k=fi-f(i-1)表示前i-1个数比pi大的数的个数,那么只要在剩余元素求出按大小顺序第i-k个数字即可。线段树+二分搜索,线段树bit[i]记录i的在剩余元素的排名顺序。 1 /*****...
分类:
其他好文 时间:
2015-12-06 20:49:57
阅读次数:
160
ZYB's PremutationMemory Limit: 131072/131072 K (Java/Others)问题描述ZYBZYB有一个排列PP,但他只记得PP中每个前缀区间的逆序对数,现在他要求你还原这个排列.(i,j)(i A_jA?i??>A?j??输入描述第一行一个整数TT表示数据...
分类:
编程语言 时间:
2015-12-06 00:07:26
阅读次数:
209
Description对于序列A,它的逆序对数定义为满足iAj的数对(i,j)的个数。给1到n的一个排列,按照某种顺序依次删除m个元素,你的任务是在每次删除一个元素之前统计整个序列的逆序对数。Input输入第一行包含两个整数n和m,即初始元素的个数和删除的元素个数。以下n行每行包含一个1到n之间的正...
分类:
其他好文 时间:
2015-12-01 18:05:22
阅读次数:
146
居然存在身高为0的数据。。。树状数组求逆序对原理:add(h[j],1); //将身高为h[j]的数据的出现次数加1sum(h[j]);//求i j 且 h[i] > h[j] 数据的出现次数之和即为 逆序对数#include"cstdio"#include"cstring"#define lowb...
分类:
编程语言 时间:
2015-11-22 15:40:25
阅读次数:
181
花了近5个小时,改的乱七八糟,终于A了。一个无限数列,1,2,3,4,...,n....,给n个数对把数列的i,j两个元素做交换。求交换后数列的逆序对数。很容易想到离散化+树状数组,但是发现那些没有交换的数也会产生逆序对数,但我没有算。经明神提示, 把没有用到的数字段化成点。然后用树状数组算一下就好...
分类:
编程语言 时间:
2015-10-30 01:57:33
阅读次数:
371
题目:给出一个1到n的全排列,m个询问,每次删除一个数,输出此时总的逆序对数.思路:树状数组每个节点都是treap,通过bit套treap来查询每个点前面有多少个比该点小的数...思路还是比较简单的,但是写了挺长时间,现在一个很严重的缺点就是代码量一大就没有定力,然后直接gg.....以后要多写代码...
分类:
其他好文 时间:
2015-10-13 22:26:53
阅读次数:
271
题意:
给出一个二叉树,叶子结点上有权值;
共有n个叶子结点,权值分别为1-n;
现可将所有结点的左右儿子交换,求最小的逆序对数;
2
题解:
这题读入有点鬼畜,但是写起来还是比较优雅的;
考虑到一个结点的子树具体形态与它是否和它的兄弟交换是无关的;
所以我们可以像分治一样,先计算子树之间的最小逆序对数;
然后将所有的权值扔到一个线段树中,向它的父亲传递;
它的父亲是没...
分类:
其他好文 时间:
2015-09-30 13:08:06
阅读次数:
210
归并排序可以用其O(nlgn)的速度解决很多问题,另外在其归并的过程中,还可以做一些小动作。例如:求一系列点[1,3,8,4,.....]的逆序对数,或正序对数。(两两比较左小于右为正序)然后,就有了《灯塔问题》这个题目。/* 灯塔的坐标为(x,y),且各不相同,灯塔处于另外一个灯塔的东北角90度范...
分类:
编程语言 时间:
2015-09-28 16:18:50
阅读次数:
271
题目链接:http://poj.org/problem?id=1804题意:给定一个序列a[],每次只允许交换相邻两个数,最少要交换多少次才能把它变成非递降序列.思路:题目就是要求逆序对数,我们知道,求逆序对最典型的方法就是树状数组,但是还有一种方法就是Merge_sort(),即归并排序。实际上归...
分类:
其他好文 时间:
2015-09-10 21:15:01
阅读次数:
261