poj 2299 Ultra-QuickSort(归并排序求逆序数)
来源:互联网 发布:南京网络教育 编辑:程序博客网 时间:2024/05/21 07:51
题目分析:求逆序数,,,
思路:归并排序,关键在于统计逆序数,如果arr[i]>arr[j],则,ans+=m-i+1,
代码:
#include<iostream>#include<cstdio>using namespace std;int n;__int64 ans;int arr[1001000],arr1[1001000];void Merge(int s,int m,int t);void MergeSort(int s,int t){if(s==t){arr1[s]=arr[s];}else{int m=(s+t)/2;MergeSort(s,m);MergeSort(m+1,t); Merge(s,m,t);}}void Merge(int s,int m,int t){ int i=s,j=m+1,k=s; while(i<=m&&j<=t) { if(arr[i]<=arr[j]) { arr1[k++]=arr[i++]; } else { arr1[k++]=arr[j++]; ans+=m-i+1;//注意这,,,arr[i]>arr[j],则从arr[i]到arr[m]都是逆序数 } } if(i<=m) while(i<=m) { arr1[k++]=arr[i++]; //ans++; } else while(j<=t) arr1[k++]=arr[j++]; for(int p=s;p<=t;p++) arr[p]=arr1[p];}int main(){while(scanf("%d",&n)!=EOF&&n!=0){for(int i=1;i<=n;i++)scanf("%d",&arr[i]);ans=0;MergeSort(1,n);/*for(int i=1;i<=n;i++)printf("%d ",arr[i]);printf("\n");*/printf("%I64d\n",ans);}//system("pause");return 0;}
- poj 2299 Ultra-QuickSort(归并排序求逆序数)
- Poj 2299 Ultra-QuickSort(归并排序求逆序数)
- poj 2299 Ultra-QuickSort :归并排序求逆序数
- POJ 2299 Ultra-QuickSort(归并排序求逆序数)
- 2299 Poj Ultra-QuickSort(归并排序求逆序数)
- POJ 2299 Ultra-QuickSort (归并排序求逆序数)
- poj-2299 Ultra-QuickSort 归并排序求逆序数
- (POJ 2299)Ultra-QuickSort 归并排序求逆序数
- POJ 2299 Ultra-QuickSort 【归并排序求逆序数 OR 树状数组求逆序数】
- poj 2299 Ultra-QuickSort 线段树求逆序数+离散化||归并排序求逆序数
- POJ 2229 Ultra-QuickSort 归并排序求逆序数
- poj 2299 Ultra-QuickSort (归并求逆序数)
- POJ 2299 Ultra-QuickSort ---归并排序 求逆序
- poj 2299 Ultra-QuickSort(归并排序求逆序对)
- POJ 2299 Ultra-QuickSort(归并排序求逆序对数)
- POJ-2299Ultra-QuickSort(BIT|归并排序求逆序对)
- poj 2299 Ultra-QuickSort (归并排序,逆序数)
- POJ 2299 Ultra-QuickSort (归并排序、逆序数)
- Using WinInet HTTP functions in Full Asynchronous Mode
- ADO媒婆简介
- 在O(1)时间删除链表结点--总结
- POJ 2593(最大2连续子段和)
- linux下crontab导致硬盘满
- poj 2299 Ultra-QuickSort(归并排序求逆序数)
- 【转】linux window环境下svn服务器搭建
- 详解QUiLoader 动态加载.ui文件
- 设计模式之享元模式
- PayPal外贸生意经--外贸零售之节日经济
- phpMyadmin 导入 出现“无法读取文件” 错误,解决办法
- shell 总结之 select表达式和for 循环
- hdu 4300 Clairewd’s message 扩展kmp
- 导出EXCEL