HDU 1394 Minimum Inversion Number
来源:互联网 发布:下载服务器文件 java 编辑:程序博客网 时间:2024/05/16 06:20
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1394
题意:把第一个数放到最后一个,重复n-1次,问最小逆序数
思路:先利用线段树求逆序数,将第一个数放到最后,n-a[i](比a[i]大的数的个数)的逆序数会加1,再减去a[i]的逆序数(a[i]在最前面,逆序数为a[i])
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#define maxn 5030using namespace std;struct Tree{ int l,r,date;}tree[maxn*3];int s[maxn];void build(int root,int l,int r){ tree[root].l=l; tree[root].r=r; tree[root].date=0; if (l==r) return; int mid=(l+r)>>1; build (root<<1,l,mid); build (root<<1|1,mid+1,r);}void update(int root,int p){ if (tree[root].l==p && tree[root].r==p) { tree[root].date=1; return; } int mid=(tree[root].l+tree[root].r)>>1; if (p<=mid) update(root<<1,p); else update(root<<1|1,p); tree[root].date=tree[root<<1].date+tree[root<<1|1].date;}int que(int root,int l,int r){ if (tree[root].l==l && tree[root].r==r) return tree[root].date; int mid=(tree[root].l+tree[root].r)>>1; if (r<=mid) return que(root<<1,l,r); else if (l>mid) return que(root<<1|1,l,r); else return que(root<<1,l,mid)+que(root<<1|1,mid+1,r);}int main(){ int n; while (scanf("%d",&n)!=EOF) { int sum=0; build(1,0,n-1); for (int i=0;i<n;i++) { scanf("%d",&s[i]); int tem=que(1,0,s[i]); sum+=s[i]-tem; update(1,s[i]); } int minn=0x3f3f3f3f; for (int i=0;i<n;i++) { sum=sum+(n-s[i]-1)-s[i]; minn=min(minn,sum); } printf("%d\n",minn); }}
0 0
- hdu 1394 Minimum Inversion Number
- hdu 1394 Minimum Inversion Number
- hdu 1394 Minimum Inversion Number
- HDU 1394 Minimum Inversion Number
- HDU-1394-Minimum Inversion Number
- HDU 1394 - Minimum Inversion Number
- HDU 1394 Minimum Inversion Number
- Hdu 1394 Minimum Inversion Number
- hdu 1394 Minimum Inversion Number
- hdu 1394 Minimum Inversion Number
- hdu 1394 Minimum Inversion Number
- hdu 1394 Minimum Inversion Number
- Hdu 1394 Minimum Inversion Number
- Minimum Inversion Number HDU 1394
- HDU 1394 Minimum Inversion Number
- HDU 1394 Minimum Inversion Number
- HDU 1394 Minimum Inversion Number
- Minimum Inversion Number----hdu 1394
- 黑马程序员--Java基础学习(面向对象)第八天
- Android 百度地图API(01)_开发环境 HelloBaiduMap
- CodeForces-551A GukiZ and Contest
- 为何现在的网页广告都是有关你搜索或者购买过的商品
- 记录glibc编译失败经历
- HDU 1394 Minimum Inversion Number
- UNIX环境高级编程之第6章:系统数据文件和信息
- 黑马程序员----java基础之异常和File文件类
- 五大常用算法之五:分支限界法
- NYOJ-458:小光棍数
- 施一公在《科学》发表突破性成果 专家称有望拿诺奖
- Java反射性能优化(上)
- nyoj 1058 部分和问题
- 关键字Static