HDU1394用线段树求逆序数
来源:互联网 发布:电信运营商数据 编辑:程序博客网 时间:2024/04/30 09:03
题意:一个由0..n-1组成的序列,每次可以把队首的元素移到队尾,
求形成的n个序列最小逆序对数目
算法:将元素依次插入线段树,每次增加的逆序对数为比它大的已经插入的
数的个数,可以用线段树维护,由于元素值为0..n,每次移动可求出增减
求形成的n个序列最小逆序对数目
算法:将元素依次插入线段树,每次增加的逆序对数为比它大的已经插入的
数的个数,可以用线段树维护,由于元素值为0..n,每次移动可求出增减
逆序对的数量更新。
#include <stdio.h>#define MAXN 100000#define ROOT 1struct node{ int left,right,sum;}t[MAXN];int val[MAXN];int n;void build(int p, int left, int right){ int m; t[p].left = left; t[p].right = right; t[p].sum = 0; if (left == right) return; m = (left + right) / 2; build(p*2, left, m); build(p*2+1, m+1, right);}void update(int p, int goal, int add){ t[p].sum += add; if (t[p].left == t[p].right) return; int m = (t[p].left + t[p].right) / 2; if (goal <= m) update(p*2, goal, add); if (goal > m) update(p*2+1, goal, add);}int getsum(int p, int left, int right){ if (left > right) return 0; if (t[p].left == left && t[p].right == right) return t[p].sum; int m = (t[p].left + t[p].right) / 2; if (right <= m) return getsum(p*2, left, right); else if (left > m) return getsum(p*2+1, left, right); else return getsum(p*2, left, m) + getsum(p*2+1, m + 1, right);}int main(){ while (scanf("%d", &n) == 1) { build(ROOT, 0, n - 1); int i,sum = 0,ans; for (i = 1; i <= n; i++) { scanf("%d", &val[i]); sum += getsum(ROOT, val[i], n - 1); update(ROOT, val[i], 1); } ans = sum; for (i = 1; i <= n; i++) { sum = sum + (n - val[i] - 1) - val[i]; ans = sum < ans ? sum : ans; } printf("%d\n", ans); } return 0;}
- HDU1394用线段树求逆序数
- 线段树求逆序数 hdu1394
- hdu1394 线段树求最小逆序数
- hdu1394(线段树求逆序数)
- 线段树求逆序数hdu1394
- HDU1394线段树求逆序数
- hdu1394线段树求逆序数
- hdu1394线段树求逆序数
- 线段树求逆序数(hdu1394)
- hdu1394 逆序数-线段树
- 线段树求逆序数方法 HDU1394&&POJ2299
- 【线段树求逆序数】【HDU1394】Minimum Inversion Number
- hdu1394 Minimum Inversion Number 线段树求逆序数
- hdu1394 -Minimum Inversion Number(线段树求逆序数)
- HDU1394 线段树 单点更新 求逆序数
- hdu1394求逆序数
- HDU1394 求逆序数
- hdu1394(求逆序数)
- HDU1394用树状数组求逆序数
- XML文件读写操作
- 加入域的时候提示拒绝访问|活动目录域加入域权限委派
- 经常被vs2008的xx.aspx.designer.cs与界面不同步的问题烦恼
- P欺诈,使用Winpcap对数据包进行拦截
- HDU1394用线段树求逆序数
- 工作中的不顺心
- 使用计算总内存大小的方法确定jvm中为对象分配的存储空间大小
- HDU1671用指针实现的字典树
- asp.net mvc3 css/js压缩合并---持续更新
- zend framework modules
- asp.net下载文件几种方式
- eclipse alt+/ Content Assist问题
- HDU1787欧拉公式之在线算法