POJ 2299 Ultra-QuickSort(树状数组)
2015-07-09 00:01
387 查看
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
Source
题意:求按冒泡升序排序的交换次数。
题解:按顺序依次插入树状数组里,每次统计a[i]前面有多少个数,然后ans+=i-num;
Time Limit: 7000MS | Memory Limit: 65536K | |
Total Submissions: 47014 | Accepted: 17182 |
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
Source
题意:求按冒泡升序排序的交换次数。
题解:按顺序依次插入树状数组里,每次统计a[i]前面有多少个数,然后ans+=i-num;
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #include<cstdlib> #include<cmath> #define N 5000010 #define ll long long using namespace std; int n; struct node { int x; int num; } a ; int bit ; bool cmp_1(node a,node b) { return a.x<b.x; } bool cmp_2(node a,node b) { return a.num<b.num; } int sum(int i) { int s=0; while(i>0) { s+=bit[i]; i-=i&-i; } return s; } void add(int i,int x) { while(i<=n) { bit[i]+=x; i+=i&-i; } } int main() { //freopen("test.in","r",stdin); while(cin>>n&&n) { for(int i=1; i<=n; i++) { scanf("%d",&a[i].x); a[i].num=i; } sort(a+1,a+n+1,cmp_1); for(int i=1; i<=n; i++)//离散化 a[i].x=i; sort(a+1,a+n+1,cmp_2); memset(bit,0,sizeof bit); ll ans=0; for(int i=1; i<=n; i++) { ans+=i-sum(a[i].x)-1; add(a[i].x,1); } printf("%lld\n",ans); } return 0; }
相关文章推荐
- iOS UILabel根据字符串长度自动适应宽度和高度
- Serializable接口中serialVersionUID字段的作用
- 解决无法make uImage的问题
- 《开源框架那些事儿22》:UI框架设计实战
- iOS开发-UINavigationBar和Status Bar实用技巧
- iOS动力学UIDynamic讲解(二)
- iOS8 UILocalNotification 增加启动授权
- iOS8 UILocalNotification 增加启动授权
- 《开源框架那些事儿22》:UI框架设计实战
- Arduino 2048 游戏
- iOS [UIScreen mainScreen].bounds 获取屏幕大小不对的问题
- iOS开发-UI 从入门到精通(四)
- WinRT中如何快速获取Uri地址中的QueryString键值对信息
- UI的Title
- Permutation Sequence
- Gym 100548A Built with Qinghuai and Ari Factor (Asia Xian)
- 为什么无论你怎么设置自定义的外层div的高度,easyui的动态添加的tab的高度还是不变高
- UINavigationController
- UIScrollViewDelegate协议方法概述
- Longest Consecutive Sequence