poj 2299 Ultra-QuickSort
2016-07-27 22:18
459 查看
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
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
const int N = 510000;
long long sum;
int a
, anew
;
void msort(int l,int r);
void merg(int l,int mid,int r);
int main()
{
int n;
while(scanf("%d", &n),n!=0)
{
for(int i=1;i<=n;i++)
{
scanf("%d", &a[i]);
}
sum=0;
msort(1,n);
printf("%lld\n",sum);
}
return 0;
}
void msort(int l,int r)
{
if(l==r)
{
anew[l]=a[l];
return ;
}
else
{
int mid=(l+r)/2;
msort(l,mid);
msort(mid+1,r);
merg(l,mid,r);
return ;
}
}
void merg(int l,int mid,int r)
{
int i, j, k=l;
for(i=l,j=mid+1;i<=mid&&j<=r;k++)
{
if(a[i]<a[j])
{
anew[k]=a[i++];
}
else
{
sum+=j-k;
anew[k]=a[j++];
}
}
while(i<=mid)
{
anew[k++]=a[i++];
}
while(j<=r)
{
anew[k++]=a[j++];
}
for( i=l;i<=r;i++)
{
a[i]=anew[i];
}
return ;
}
Time Limit: 7000MS | Memory Limit: 65536K | |
Total Submissions: 54529 | Accepted: 20042 |
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
60
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
const int N = 510000;
long long sum;
int a
, anew
;
void msort(int l,int r);
void merg(int l,int mid,int r);
int main()
{
int n;
while(scanf("%d", &n),n!=0)
{
for(int i=1;i<=n;i++)
{
scanf("%d", &a[i]);
}
sum=0;
msort(1,n);
printf("%lld\n",sum);
}
return 0;
}
void msort(int l,int r)
{
if(l==r)
{
anew[l]=a[l];
return ;
}
else
{
int mid=(l+r)/2;
msort(l,mid);
msort(mid+1,r);
merg(l,mid,r);
return ;
}
}
void merg(int l,int mid,int r)
{
int i, j, k=l;
for(i=l,j=mid+1;i<=mid&&j<=r;k++)
{
if(a[i]<a[j])
{
anew[k]=a[i++];
}
else
{
sum+=j-k;
anew[k]=a[j++];
}
}
while(i<=mid)
{
anew[k++]=a[i++];
}
while(j<=r)
{
anew[k++]=a[j++];
}
for( i=l;i<=r;i++)
{
a[i]=anew[i];
}
return ;
}
相关文章推荐
- 【POJ2299】Ultra-Quicksort-逆序对
- Codeforces670E. Correct Bracket Sequence Editor
- DualPivotQuicksort两枢轴快速排序
- Android Bluetooth(蓝牙)实例
- mysql生成不重复随机数(unique number generation)
- Vue 经验总结
- UITableView全面解析文章
- poj 2299 Ultra-QuickSort (归并求逆序数)
- Bluetooth-->蓝牙开发扫描设备,及蓝牙设备类型
- EasyUI 网页边框布局
- EasyUI 菜单与按钮
- EasyUI 拖放
- Android UI组件--ListView(1)
- Mac OS X平台下QuickLook开发教程
- Request.QueryString
- IOS中 UIFont 字体大全
- POJ-3080 Blue Jeans(纯暴力)
- 【Mysql】存储emoji表情报错(Incorrect string value: '\xF0\x9F\x98\x82\xF0\x9F...')的解决方案
- Unique Paths II
- Unique Paths