Ultra-QuickSort(离散化+树状数组求逆序数)
来源:互联网 发布:类似淘宝的交易平台 编辑:程序博客网 时间:2024/05/22 06:57
Link:http://poj.org/problem?id=2299
Ultra-QuickSort
Time Limit: 7000MS Memory Limit: 65536KTotal Submissions: 44681 Accepted: 16243
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
[Submit] [Go Back] [Status] [Discuss]
AC代码:
#include<iostream>#include<algorithm>#include<cstring>#include<cstdio>#include<cmath>#include<queue>using namespace std;struct node{int ord;int v;}a[500001];int n,c[500001],aa[500001];int lowbit(int p){return p&(-p);}int sum(int p){int s=0;while(p>0){s+=c[p];p-=lowbit(p);}return s;}void update(int p,int n,int k){while(p<=n){c[p]+=k;p+=lowbit(p);}}bool cmp(node a,node b){return a.v<b.v;}int main(){__int64 ans;while(scanf("%d",&n)&&n){memset(aa,0,sizeof(aa));memset(c,0,sizeof(c));for(int i=1;i<=n;i++){scanf("%d",&a[i].v);a[i].ord=i;}sort(a+1,a+n+1,cmp);for(int i=1;i<=n;i++){aa[a[i].ord]=i;}ans=0;for(int i=1;i<=n;i++){update(aa[i],n,1);ans+=(i-sum(aa[i]));}printf("%I64d\n",ans);}return 0;}
0 0
- Ultra-QuickSort(离散化+树状数组求逆序数)
- Ultra-QuickSort(树状数组+离散化+求逆序)
- poj2299 Ultra-QuickSort(树状数组求逆序数,离散化)
- POJ 2299 Ultra-QuickSort (树状数组求逆序数+离散化)
- poj 2299 Ultra-QuickSort(树状数组求逆序数+离散化)
- poj 2299 Ultra-QuickSort(树状数组求逆序数+离散化)
- poj 2299 Ultra-QuickSort(树状数组求逆序数+离散化)
- poj2299 Ultra-QuickSort(离散化+树状数组求逆序数)
- POJ 2299 Ultra-QuickSort (树状数组求逆序数 || 线段树 +离散化)
- 【树状数组--求逆序数(离散化)】poj2299 Ultra-QuickSort
- poj2299 Ultra-QuickSort&&NYOJ117 求逆序数 (树状数组求逆序对数+离散化)+(归并排序)
- 【树状数组】poj2299 Ultra-QuickSort(离散化+树状数组求逆序数)
- 10810-Ultra-QuickSort【逆序数、树状数组离散化】
- 树状数组 Ultra-QuickSort 离散化+逆序数
- POJ2299 Ultra-QuickSort——树状数组求逆序数+离散化
- 树状数组 离散化 求逆序数POJ 2299Ultra-QuickSort解题报告
- POJ 2299 Ultra-QuickSort(树状数组+离散化—求逆序数)
- poj 2299 Ultra-QuickSort 树状数组求逆序数 离散化
- 码农生涯杂记_2
- 用D语言解面试题6
- 带分数 100 可以表示为带分数的形式:100 = 3 + 69258 / 714
- LINUX下select设置超时
- HTTP(S)网站目录暴破测试工具 – Dirs3arch v0.3.0
- Ultra-QuickSort(离散化+树状数组求逆序数)
- 2015年2月11日
- 通用的POI导入Excel解决方案
- 代理实现界面跳转传值
- 鸽巢原理:hdu 1205 吃糖果+poj 2356 Find a multiple+poj 3370 Halloween treats
- 《网络流学习笔记04 && NYOJ 489 哭泣天使(建边,超级源点和汇点)》
- 趣题——打开的锁
- 树状数组 求逆序数
- change the username on ubuntu 12.04 server