POJ 2299 Ultra-QuickSort
来源:互联网 发布:大富豪棋牌3.4源码 编辑:程序博客网 时间:2024/05/17 01:02
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.
Ultra-QuickSort produces the output
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
59105431230
Sample Output
60
Source
Waterloo local 2005.02.05
/*
去年寒假集训的最后一周周赛题目,当时没做出来,知道是求将序列转化为有序序列需要交换的次数,当时想到了冒泡和逆序数,一直过不了,赛后学长讲题的时候说可以用树状数组加离散化处理,也可以用归并排序,也就是求序列的逆序数,7000MS明显坑人呀..
*/
/*
去年寒假集训的最后一周周赛题目,当时没做出来,知道是求将序列转化为有序序列需要交换的次数,当时想到了冒泡和逆序数,一直过不了,赛后学长讲题的时候说可以用树状数组加离散化处理,也可以用归并排序,也就是求序列的逆序数,7000MS明显坑人呀..
*/
#include <iostream>#include <algorithm>#include <cstring>#include <string>#include <stack>#include <cmath>#include <cstdio>#include <vector>#include <queue>using namespace std;struct node{ int x; int pos;}a[500100];int L[500100],C[500100];long long ans;bool cmp(node x,node y){ return x.x < y.x;}void up(int x,int n){ while(x <= n) { C[x]+=1; x+=(x&(-x)); }}int get(int x){ int sum = 0; while(x > 0) { sum+=C[x]; x-=(x&(-x)); } return sum;}int main(){ int n; while(~scanf("%d",&n) && n) { for(int i=1;i<=n;i++) { scanf("%d",&a[i].x); a[i].pos = i; } sort(a+1,a+n+1,cmp); for(int i=1;i<=n;i++) L[a[i].pos] = i; ans = 0; memset(C,0,sizeof(C)); for(int i=1;i<=n;i++) { up(L[i],n); ans+=i-get(L[i]); } printf("%lld\n",ans); } return 0;}
0 0
- POJ 2299 Ultra-QuickSort
- poj 2299 Ultra-QuickSort
- poj 2299 Ultra-QuickSort
- poj 2299 Ultra-QuickSort
- 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
- POJ 2299 - Ultra-QuickSort
- POJ 2299 Ultra-QuickSort
- POJ 2299 Ultra-QuickSort
- POJ 2299 Ultra-QuickSort
- POJ 2299 Ultra-QuickSort
- MySQL数据库连接超时(wait_timeout)问题的处理
- iOS开发之layoutSubviews的作用和调用机制
- Android4.2如何禁止锁屏左右滑动功能?
- OSAL消息相关函数介绍
- rand5()产生rand7()
- POJ 2299 Ultra-QuickSort
- linux sed 命令
- 实现类似toast效果的圆角dialog警告框
- iOS 定位时出现 kCLErrorDomain error 2错误
- 互联网+时代的思考
- 小心你熟悉的equals()用法的一个陋习
- Android 谷歌 开源 通信框架 VOLLEY(二)——String/Json处理
- 程序员能力矩阵 Programmer Competency Matrix
- iOS开发之保存照片到自己创建的相簿