HDU 1394 Minimum Inversion Number(树状数组)
来源:互联网 发布:php 发送邮件 编辑:程序博客网 时间:2024/05/16 23:19
HDU 1394 Minimum Inversion Number(树状数组)
http://acm.hdu.edu.cn/showproblem.php?pid=1394
题意:
有一个n个整数的排列,这n个整数就是0,1,2,3...n-1这n个数(但不一定按这个顺序给出)。现在先计算一下初始排列的逆序数,然后把第一个元素a1放到an后面去,形成新排列a2 a3 a4...an a1,然后再求这个排列的逆序数。继续执行类似操作(一共要执行n-1次)直到产生排列an a1 a2...an-1为止。计算上述所有排列的逆序数,输出最小逆序数。
分析:
首先对于输入的排列0到n-1,我们把他们都+1变成1到n的数。然后用标记法来计算出初始排列的逆序数为X。
然后假设当前a[1]的值为5,那么将5换到an后面我们将得到新排列的逆序数是多少呢?因为一共有4个数比5大,n-5个数比5小,所以新排列的逆序数为:n-(n-5)+4。(想想为什么)
最终我们可以通过上述方式轻松算出之后的n-2次变换产生的新数列的逆序数。
AC代码:15ms
<span style="font-size:18px;">#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int MAXN=5000;int c[MAXN+1];int lowbit(int x){ return x&(-x);}int sum(int x){ int res=0; while(x>0) { res+=c[x]; x-=lowbit(x); } return res;}void add(int x,int v){ while(x<=MAXN) { c[x]+=v; x+=lowbit(x); }}int a[MAXN];int main(){ int n; while(scanf("%d",&n)==1) { int counter=0;//计算逆序 memset(c,0,sizeof(c)); for(int i=1;i<=n;i++) { scanf("%d",&a[i]); a[i]++; counter+= sum(n)-sum(a[i]); add(a[i],1); } int ans=counter;//ans保存最终结果 for(int i=1;i<n;i++) { counter +=n-2*a[i]+1; ans = min(ans,counter); } printf("%d\n",ans); }}</span>
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(树状数组)
- Minimum Inversion Number - HDU 1394 树状数组
- 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树状数组
- vs2010 vs2012 等快捷键
- 腾讯面试经验
- linux中的cp命令总结
- svn 常用命令 备用
- 算法实践篇-冒泡排序
- HDU 1394 Minimum Inversion Number(树状数组)
- MFC知识
- Cocos2d-自学笔记 第一天
- 海量数据搜索、存储、查询、排序算法
- 线性代数(三十四) : 广义特征向量
- ios 同步Get请求的实现
- Android中关于Volley的使用(四)利用NetworkImageView来加载图片
- 线性代数(三十五) : 谱定理
- JQuery调用webservice,返回的json数据和XML数据的处理方法