博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu1394
阅读量:6541 次
发布时间:2019-06-24

本文共 710 字,大约阅读时间需要 2 分钟。

题意:求最小逆序数

#include
using namespace std;int c[5005],n,a[5005];int lowbit(int x){ return x&(-x);}int sum(int x){ int sum=0; while(x>0) { sum+=c[x]; x-=lowbit(x); } return sum;}void inster(int x,int i){ while(x<=n) { c[x]+=i; x+=lowbit(x); }}int main(){ int i,s[5005],count,min; while(scanf("%d",&n)>0) { memset(a,0,sizeof(a)); memset(c,0,sizeof(c)); count=0; for(i=1;i<=n;i++) { scanf("%d",&a[i]); a[i]++; inster(a[i],1); count+=i-sum(a[i]); } s[1]=count; for(i=n;i>=2;i--) { count=count+2*a[i]-n-1; //把第n个数移到第一位,所以,从i=n开始;那么,要减去在它前面比它大的逆序数的个数,还要加上当它排第一位时,在它后面比它小的数的个数 s[i]=count; } min=s[1]; for(i=2;i<=n;i++) if(min>s[i]) min=s[i]; printf("%d\n",min); } return 0;}

 

转载地址:http://pysdo.baihongyu.com/

你可能感兴趣的文章
如何把word中的图片怎么导出来呢?
查看>>
Qt多线程学习:创建多线程
查看>>
设计模式学习---UML常见关系的实现
查看>>
图解openssl实现私有CA
查看>>
BZOJ2213 : [Poi2011]Difference
查看>>
c++ Constructor FAQ 继续
查看>>
事务之六:spring 嵌套事务
查看>>
C#:路径
查看>>
OC基础--OC中的类方法和对象方法
查看>>
ubuntu samba服务器多用户配置【转】
查看>>
母线的种类与作用是什么(转)
查看>>
【Xamarin 挖墙脚系列:IOS 开发界面的3种方式】
查看>>
Atitit.工作流系统的本质是dsl 图形化的dsl 4gl
查看>>
I.MX6 Android USB Touch eGTouchA.ini文件存放
查看>>
4-5-创建索引表-串-第4章-《数据结构》课本源码-严蔚敏吴伟民版
查看>>
go run main.go undefined? golang main包那点事
查看>>
从零开始写一个npm包,一键生成react组件(偷懒==提高效率)
查看>>
Volley(二)—— 基本Request对象 & RequestQueue&请求取消
查看>>
2017中国系统架构师大会“盛装”来袭
查看>>
中国最强的人工智能学术会议来了
查看>>