Poj 2299 Ultra-QuickSort【逆序数】
2016-03-02 16:31
393 查看
Ultra-QuickSort
Description
In this problem, you have to analyze a particular sorting algorithm. The algorithm processes a sequence of n distinct integers by swapping two adjacent sequence elements until the sequence is
sorted in ascending order. For the input sequence
9 1 0 5 4 ,
Ultra-QuickSort produces the output
0 1 4 5 9 .
Your task is to determine how many swap operations Ultra-QuickSort needs to perform in order to sort a given input sequence.
Input
The input contains several test cases. Every test case begins with a line that contains a single integer n < 500,000 -- the length of the input sequence. Each of the the following n lines contains a single integer 0 ≤ a[i] ≤ 999,999,999, the i-th input sequence
element. Input is terminated by a sequence of length n = 0. This sequence must not be processed.
Output
For every input sequence, your program prints a single line containing an integer number op, the minimum number of swap operations necessary to sort the given input sequence.
Sample Input
Sample Output
归并排序求逆序数还是比较好的方法,不过又犯了上次的一个错误,给出的序列可能有50万个元素,逆序数最大可能有100多个以,远远超出了int 的范围,结果自己愣是没意识到,还是仔细纠错的时候才想到,做程序一定要细心考虑多方面的需要,不仅仅是为了比赛,任何时候都需要深思熟虑.....
#include<stdio.h>
int x[500005],y[500005];
long long ans;
void merge(int l,int r)
{
int a=l,mid=(l+r)>>1,b=mid+1,cnt=l;
while(a<=mid&&b<=r)
{
if(x[a]<=x[b])
{
y[cnt++]=x[a++];
}
else
{
ans+=(mid-a+1);
y[cnt++]=x[b++];
}
}
while(a<=mid)
{
y[cnt++]=x[a++];
}
while(b<=r)
{
y[cnt++]=x[b++];
}
for(int i=l;i<=r;++i)
{
x[i]=y[i];
}
}
void sort(int l,int r)
{
if(l<r)
{
int mid=(l+r)>>1;
sort(l,mid);sort(mid+1,r);
merge(l,r);
}
}
int main()
{
int n;
//freopen("shuju.txt","r",stdin);
while(scanf("%d",&n),n)
{
for(int i=0;i<n;++i)
{
scanf("%d",&x[i]);
}
ans=0;
sort(0,n-1);
printf("%lld\n",ans);
}
return 0;
}
Time Limit: 7000MS | Memory Limit: 65536K | |
Total Submissions: 51736 | Accepted: 18988 |
In this problem, you have to analyze a particular sorting algorithm. The algorithm processes a sequence of n distinct integers by swapping two adjacent sequence elements until the sequence is
sorted in ascending order. For the input sequence
9 1 0 5 4 ,
Ultra-QuickSort produces the output
0 1 4 5 9 .
Your task is to determine how many swap operations Ultra-QuickSort needs to perform in order to sort a given input sequence.
Input
The input contains several test cases. Every test case begins with a line that contains a single integer n < 500,000 -- the length of the input sequence. Each of the the following n lines contains a single integer 0 ≤ a[i] ≤ 999,999,999, the i-th input sequence
element. Input is terminated by a sequence of length n = 0. This sequence must not be processed.
Output
For every input sequence, your program prints a single line containing an integer number op, the minimum number of swap operations necessary to sort the given input sequence.
Sample Input
5 9 1 0 5 4
3 1 2 3 0
Sample Output
6 0
归并排序求逆序数还是比较好的方法,不过又犯了上次的一个错误,给出的序列可能有50万个元素,逆序数最大可能有100多个以,远远超出了int 的范围,结果自己愣是没意识到,还是仔细纠错的时候才想到,做程序一定要细心考虑多方面的需要,不仅仅是为了比赛,任何时候都需要深思熟虑.....
#include<stdio.h>
int x[500005],y[500005];
long long ans;
void merge(int l,int r)
{
int a=l,mid=(l+r)>>1,b=mid+1,cnt=l;
while(a<=mid&&b<=r)
{
if(x[a]<=x[b])
{
y[cnt++]=x[a++];
}
else
{
ans+=(mid-a+1);
y[cnt++]=x[b++];
}
}
while(a<=mid)
{
y[cnt++]=x[a++];
}
while(b<=r)
{
y[cnt++]=x[b++];
}
for(int i=l;i<=r;++i)
{
x[i]=y[i];
}
}
void sort(int l,int r)
{
if(l<r)
{
int mid=(l+r)>>1;
sort(l,mid);sort(mid+1,r);
merge(l,r);
}
}
int main()
{
int n;
//freopen("shuju.txt","r",stdin);
while(scanf("%d",&n),n)
{
for(int i=0;i<n;++i)
{
scanf("%d",&x[i]);
}
ans=0;
sort(0,n-1);
printf("%lld\n",ans);
}
return 0;
}
相关文章推荐
- UE3 Animation Compression Technical Guide
- UE3 Animation Compression List
- UE3 Animation Compression Algorithms
- UE3 Animation Compression
- request对象的方法
- missing ios distribution signing identity xxx, xcode can request one for you
- iOS开发小记:iOS富文本框架DTCoreText在UITableView上的使用
- 使用 UICollectionView 实现日历签到功能
- Failed to find the required library mclmcrrt8_5.dll on java.library.path 解决方法
- iOS之UILabel的基本用法
- iPhone/iPad/Android UI尺寸规范
- ZOJ-3601-Unrequited Love【9th浙江省赛】【模拟】【STL】
- BIT2014级软件学院程序设计-15 Ultra-QuickSort
- 71.Which arithmetic operations can be performed on a column by using a SQL function that is built in
- UITableable代理执行的顺序
- 给系统的UITabbarViewController 的tabBarItem 添加图片的问题
- iOS(学习) UITableView
- SAP BW提供的一些记录Query/process chain/DTP/IP运行及加载情况的InfoCube
- question_009-JAVA之对List的子类特点???
- UVA10199- Tourist Guide(割点)