poj 2299 c++:Ultra-QuickSort
2016-12-14 20:05
295 查看
题目大意:
求逆序对个数,比如3,1,2 ,逆序对就是3,1 3,2这两对,逆序对数为2解题思路:
已经写了三次,可还是每次都有细节的错误,相当苦恼,还是对这题理解不到位。这题其实就是归并排序,定义两个函数,merge_sort将数组的两个下标分成两部分,merge1是求有序的两部分的逆序对数。
#include<stdio.h> #include<iostream> #include<algorithm> using namespace std; int a[500050]; int n; long ans; void merge1(int l,int mid,int r){ int i,j; i=l; j=mid+1; while(i<=mid&&j<=r){ if(a[j]>=a[i])i++; else { j++; ans=ans+mid-i+1;//如果左边大于右边,因为是有序的,那么从i到mid之间的数都大于a[j] } } sort(a+l,a+r+1); //使左右有序 } void merge_sort(int l,int r){ int mid; if(l<r){ mid=(l+r)/2; merge_sort(l,mid); //将左右两部分分开 merge_sort(mid+1,r); merge1(l,mid,r); } } int main() { int i; while(cin>>n&&n){ ans=0; for(i=0;i<n;i++){ cin>>a[i]; } merge_sort(0,n-1); cout<<ans<<endl; } return 0; }
相关文章推荐
- POJ 2299 Ultra-QuickSort
- POJ 2299 Ultra-QuickSort
- POJ 2299 Ultra-QuickSort 归并排序
- Ultra-QuickSort--POJ 2299
- POJ 2299 Ultra-QuickSort
- 【原】 POJ 2299 Ultra-QuickSort 逆序数 解题报告
- POJ 2299 Ultra-QuickSort【树状数组+离散化】
- poj 2299 Ultra-QuickSort
- POJ 2299 Ultra-QuickSort (归并排序求逆序对数)
- POJ2299——Ultra-QuickSort
- POJ 2299 Ultra-QuickSort【树状数组+离散化】
- poj 2299 Ultra-QuickSort
- POJ 2299 Ultra-QuickSort(归并排序)
- poj 2299 Ultra-QuickSort
- POJ 2299 Ultra-QuickSort
- poj 2299 Ultra-QuickSort(逆序对)
- POJ 2299, Ultra-QuickSort
- [普及] 求序列中逆序对的个数 [poj 2299 Ultra-QuickSort]
- POJ 2299 Ultra-QuickSort
- POJ-2299 Ultra-QuickSort