归并排序求逆序对
2016-12-12 16:10
169 查看
#include <iostream> using namespace std; const int maxn = 100000+10; int a[maxn],t[maxn];long long ans=0; void merge_sort(int l,int r) { if(l==r) return; int m=(l+r)/2; merge_sort(l,m); merge_sort(m+1,r); int i=l,j=m+1,k=l; while(i<=m&&j<=r) { if(a[i]>a[j]) { t[k++]=a[j++]; ans+=m-i+1;//求逆序对 } else { t[k++]=a[i++]; } } while(i<=m) t[k++]=a[i++]; while(j<=r) t[k++]=a[j++]; for(i=l;i<=r;i++) a[i]=t[i]; } int main() { int n; cin>>n; for(int i=1;i<=n;i++) { cin>>a[i]; } merge_sort(1,n); cout<<ans; return 0; }
相关文章推荐
- 利用归并排序求逆序数
- poj2299 归并排序求逆序数
- 归并排序与逆序对
- 归并排序求逆序数
- poj 1804 逆序数 归并排序
- 归并排序和快速排序的衍生问题(逆序对)
- POJ-Ultra-QuickSort 归并排序求逆序对
- 九度OJ 1348:数组中的逆序对 (排序、归并排序)
- 归并排序--逆序对
- 基于归并排序的逆序对数统计
- 归并排序求逆序对
- 归并排序求逆序数
- POJ 1804 Brainman (归并排序 -- 求逆序对数)
- 归并排序求逆序对
- 算法1:求逆序对数与显著逆序对数(归并排序)
- HDU 1394 Minimum Inversion Number (归并排序求逆序对)
- 数组中的逆序对(归并排序)
- 归并排序求逆序
- 归并排序求逆序对
- [洛谷P1908] 逆序对|归并排序|树状数组