题意:给出n个数,每次可以把第一个数挪到最后一个位置去,问这n种排列里面的最小逆序对数

先把最开始的逆序对数求出来

然后对于一个数a[i],比它小的数有a[i] - 1个,比它大的数有n - a[i]个

所以把a[i]挪到数列的最末尾的时候, 相当于损失了a[i] - 1个逆序数,得到了n - a[i] 个逆序数

即为共得到n - 2*a[i] + 1个

再做n次比较,维护一个最小值

 #include<iostream>
#include<cstdio>
#include<cstring>
#include <cmath>
#include<stack>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<algorithm>
using namespace std; typedef long long LL;
const int INF = (<<)-;
const int mod=;
const int maxn=; int n;
int a[maxn],c[maxn]; int lowbit(int x){ return x &(-x);} int sum(int x){
int ret =;
while(x>){
ret+=c[x];x-=lowbit(x);
}
return ret;
} void add(int x,int d){
while(x<=n){
c[x]+=d;x+=lowbit(x);
}
} int main(){
while(scanf("%d",&n) != EOF){
memset(c,,sizeof(c));
for(int i=;i<=n;i++) scanf("%d",&a[i]),a[i]++; int ans=;
for(int i=;i<=n;i++){
ans += i - -sum(a[i]);
// printf("ans=%d\n",ans);
add(a[i],);
}
int minn=INF;
for(int i=;i<=n;i++){
ans += n-*a[i] + ;
minn=min(minn,ans);
}
printf("%d\n",minn);
}
return ;
}

最新文章

  1. [deviceone开发]-直播APP心形点赞动画示例
  2. 我的Android第一章:Android环境搭建
  3. [Shell]正则表达式与通配符
  4. ubuntu apache2 wsgi 部署django
  5. bzoj 3295 树套树
  6. HDU1963Investment(DP)
  7. HTML与CSS简单页面效果实例
  8. PHP MySQL Order By 关键词 之 Order By
  9. 用DapperExtensions和反射来实现一个通用搜索
  10. Android WebView 不支持 H5 input type=&quot;file&quot; 解决方法
  11. ESL翻译:Linear Methods for Regression
  12. angularjs中的几种工具方法
  13. Restful中 @RequestParam,@PathParam,@PathVariable等注解区别
  14. 随手一记,maven打包
  15. css_选择器
  16. Handle/Looper源码分析;
  17. Suse linux enterprise 11添加设置中文输入法的方法
  18. NodeJs递归删除非空文件夹
  19. 线程:主线程、子线程 同步线程、异步线程 单线程、多线程 System.Threading与System.Windows.Threading
  20. 二、K3 WISE 开发插件《 工业单据老单客户端插件事件、属性、方法》

热门文章

  1. 在APP开发设计中,为什么APP开发公司要慎用左右横滑设计?
  2. 自己写的PHP的mql类
  3. Apache2.2伪静态配置
  4. shell-6.环境变量配置文件
  5. IOS - PDF合并
  6. ajax异步请求获取数据,实现滚动数字的效果。
  7. linux内核(二)内核移植(DM365-DM368开发攻略——linux-2.6.32的移植)
  8. Windows里正确安装Zookeeper以服务运行
  9. HDU 4333 Contest 4
  10. [Python Test] Use pytest fixtures to reduce duplicated code across unit tests