Ultra-QuickSort poj 2299--树状数组求逆序数
来源:互联网 发布:哪本书讲lms rls算法 编辑:程序博客网 时间:2024/05/16 14:04
Ultra-QuickSort
Time Limit: 7000MS Memory Limit: 65536KTotal Submissions: 32150 Accepted: 11441
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
这个题比上一题更加明显,是裸的树状数组求逆序数,就是注意它的数据规模是999999999,要先进行离散化,再排序,求逆序数。
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int maxn=500005;int c[maxn],n;//存树状数组,n表示点数int aa[maxn];//存离散化后的数组class node{ public: int val,order;};node in[maxn];//存原始数据//树状数组的3个函数int lowbit(int x){ return x&(-x);}void update(int x,int val){ for(int i=x;i<=n;i+=lowbit(i)) { c[i]+=val; }}int getsum(int x){ int temp=0; for(int i=x;i>=1;i-=lowbit(i)) { temp+=c[i]; } return temp;}bool cmp(node a,node b){ return a.val<b.val;}int main(){ while(scanf("%d",&n)==1&&n) { for(int i=1;i<=n;i++) {scanf("%d",&in[i].val);in[i].order=i;} //离散化 sort(in+1,in+n+1,cmp); for(int i=1;i<=n;i++) aa[in[i].order]=i; //用树状数组求逆序数 memset(c,0,sizeof(c)); long long ans=0; for(int i=1;i<=n;i++) { update(aa[i],1); ans+=i-getsum(aa[i]); } cout<<ans<<endl; } return 0;}
- poj 2299 Ultra-QuickSort(求逆序数,树状数组)
- poj 2299 Ultra-QuickSort 求逆序数 树状数组解法
- Ultra-QuickSort poj 2299--树状数组求逆序数
- 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 【归并排序求逆序数 OR 树状数组求逆序数】
- poj 2229 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(树状数组入门) 求逆序数
- Jsp学习
- 问题一百一十三:Palindromes _easy version
- JSTL标签使用简单列举
- C# C# Attribute特性 (四)
- Unix下各种压缩包解压方式
- Ultra-QuickSort poj 2299--树状数组求逆序数
- Win7系统盘越来越小,系统盘清理技巧
- C#调用带有参数的SQL存储过程
- ubuntu12.04 安装mysql-workbench时 无法安装成功的解决办法
- 数据库三大范式详解
- gSoap开发Web Service 既soapcpp2.exe生成服务端和客户端的代码具体方法
- 访问父类中的被覆盖成员、初始化父类构造函数
- A. Adding Digits
- linux下QT程序编译时的错误:QMAKESPEC has not been set, so configuration cannot be deduced.