博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ-2299 Ultra-QuickSort 逆序对数量
阅读量:4974 次
发布时间:2019-06-12

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

  题目链接:

  给你一个升序列,然后要你只能交换相邻的两个数把这个序列按升序排列,求最少需要交换多少次。

  不管怎么样,只要存在ai>aj(i<j),那么这两个数之间必须要交换。任意两个数不影响其它数之间的大小位置关系,所以可以看出就是求逆序对数量。求逆序对数量有很多方法,树状数组或者线段树优化等,但是用合并排序的方法更方便,即在合并左儿子和右儿子的时候,统计左儿子比右儿子大的数的个数即可,复杂度O(log(n))。

合并排序版:

1 //STATUS:C++_AC_391MS_3688KB 2 #include
3 #include
4 #include
5 #include
6 #include
7 #include
8 #include
9 #include
10 #include
11 #include
12 #include
13 using namespace std;14 #define LL __int6415 #define pii pair
16 #define Max(a,b) ((a)>(b)?(a):(b))17 #define Min(a,b) ((a)<(b)?(a):(b))18 #define mem(a,b) memset(a,b,sizeof(a))19 #define lson l,mid,rt<<120 #define rson mid+1,r,rt<<1|121 const int N=500010,INF=0x3f3f3f3f,MOD=1999997;22 const LL LLNF=0x3f3f3f3f3f3f3f3fLL;23 24 int num[N],temp[N];25 int n;26 LL ans;27 28 void sort(int l,int r)29 {30 if(l==r)return;31 int i,j,k,mid=(l+r)>>1;32 sort(l,mid);33 sort(mid+1,r);34 for(i=k=l,j=mid+1;i<=mid && j<=r;){35 if(num[i]

 

转载于:https://www.cnblogs.com/zhsl/archive/2012/12/29/2838570.html

你可能感兴趣的文章
红酒初识
查看>>
BNUOJ 5629 胜利大逃亡(续)
查看>>
HDU-1150 Machine Schedule(二分图、匈牙利)
查看>>
Python assert 断言函数
查看>>
Android 学习笔记之ContentProvider实现数据共享....
查看>>
35)PHP,关于PHP和html
查看>>
区块链到底是什么?
查看>>
java_线程的开启与结束(可用于android)
查看>>
二分图判定 hdu5285 wyh2000 and pupil
查看>>
阿里云服务器出现入侵事件:挖矿进程
查看>>
VS 2013 配置份openGL环境
查看>>
修改 CKEditor 超链接的默认协议
查看>>
zoj3795 Grouping --- 良好的沟通,寻找最长的公路
查看>>
【SSH2(理论+实践)】--Hibernate步步(一个)
查看>>
深入浅出JMS(一)——JMS简要
查看>>
JDBC连接MySQL数据库及演示样例
查看>>
小波说雨燕 第三季 构建 swift UI 之 UI组件集-视图集(四)Alert View视图 学习笔记...
查看>>
多线程基础(二)pthread的了解
查看>>
百度SDK的使用第一天
查看>>
python学习笔记3:列表、元组和集合
查看>>