POJ Ultra-QuickSort(2299)-用归并排序求min交换次数
来源:互联网 发布:windows启动不了怎么办 编辑:程序博客网 时间:2024/05/29 18:30
题意:有一串序列,(数字各不相同),每次只能够交换相邻的两个数字,问将其排为升序所需的交换次数。
没什么想法,COPY的网上题解。
#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>`#include <algorithm>#include <cctype>#include <set>#include <vector>#define INF 0x7fffffff#define eps (1e-9)#define clearto(s,x) memset(s,x,sizeof(s))using namespace std;int n,m,tot=0;int a[500009],tt[500009];long long mergesort(int l,int r){ if(l==r) return 0; int mid=(l+r)>>1; long long cnt=0; cnt=mergesort(l,mid)+mergesort(mid+1,r); int i=l,t=mid+1,k=l; while(i<=mid&&t<=r){ if(a[i]<=a[t]) tt[k++]=a[i++]; else{ cnt+=(mid-i+1); tt[k++]=a[t++]; } } while(i<=mid) tt[k++] =a[i++]; while(t<=r) tt[k++] =a[t++]; for(i=l;i<=r;i++) a[i]=tt[i]; return cnt;}int main(){ //freopen("D:\data.txt","r",stdin); int TT,i,k,t; while(scanf("%d",&n)&&n) { for(i=0;i< n;i++) scanf("%d",&a[i]); long long ans =mergesort(0,n-1); printf("%I64d\n",ans); } return 0;}
0 0
- POJ Ultra-QuickSort(2299)-用归并排序求min交换次数
- POJ 2299-Ultra-QuickSort(归并排序求相邻元素的交换次数)
- POJ 2299Ultra-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(归并排序求逆序对数)
- 2299 Poj 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(归并排序)
- POJ 2299 Ultra-QuickSort 归并排序
- 记忆化搜索
- 面向对象程序设计上机练习一(函数重载)
- 排序二叉树
- 九度OJ 1446 Head of a Gang -- 并查集
- 顺序表
- POJ Ultra-QuickSort(2299)-用归并排序求min交换次数
- 做个有产出的程序员
- 面向对象程序设计上机练习六(类和对象)
- 马尔可夫不等式 Markov's inequality
- (1)排序之归并排序
- Android中布局或控件自定义背景
- Android中Surface和SurfaceView的一些理解和总结
- 字符之间的转化
- 开发中自己千万需要注意的一个问题