poj2299
2016-02-15 20:54
204 查看
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
代码:
Time Limit: 7000MS | Memory Limit: 65536K | |
Total Submissions: 51330 | Accepted: 18828 |
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
代码:
#include<cstdio> #include<cstring> #include<algorithm> #define ll __int64 using namespace std; const int N=500005; int n; int bit ;int aa ; struct node{ int ord,val; }st ; bool cmp(node n1,node n2){ return n1.val<n2.val; } int lowbit(int n){ return n&-n; } ll sum(int x){ ll res=0; while(x>0){ res+=bit[x]; x-=lowbit(x); } return res; } void add(int x,int d){ while(x<=n){ bit[x]+=d; x+=lowbit(x); } } int main() { while(scanf("%d",&n)&&n!=0) { memset(bit,0,sizeof(bit)); //离散化 for(int i=1;i<=n;i++){ scanf("%d",&st[i].val); st[i].ord=i; } sort(st+1,st+n+1,cmp); for(int i=1;i<=n;i++) aa[st[i].ord]=i; //求逆序数 ll ans=0; for(int i=1;i<=n;i++){ add(aa[i],1); ans+=i-sum(aa[i]); } printf("%I64d\n",ans); } return 0; }
相关文章推荐
- C++之路进阶——最大流(朋友圈)
- when the android meet dragger2
- Groovy/Spock 测试导论
- Hduoj1535【SPFA】
- NLS_LANG SIMPLIFIED CHINESE_CHINA.AL32UTF8 和american_america.AL32UTF8
- 面试经验
- Windows Live Writer 2014版绿色版制作及主题获取
- c# 多态
- 作业迁移
- Dubbo粗浅记录
- Spring MVC 中 HandlerInterceptorAdapter的使用
- Dubbo粗浅记录
- 水题 CodeForces 602F - More Cowbe
- 蓝桥杯 算法训练 动态数组使用
- css之table布局的优缺点
- RunLoop
- 三层学习
- 威尔克姆教程:他他米的偏移系数及分割线
- 【Android性能优化】(一)使用SparseIntArray替换HashMap
- bzoj3122 随机数生成器 BSGS