(POJ
来源:互联网 发布:淘宝店铺导航栏代码 编辑:程序博客网 时间:2024/06/03 22:17
(POJ - 2299)Ultra-QuickSort
Time Limit: 7000MS Memory Limit: 65536K
Total Submissions: 63706 Accepted: 23759
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
5
9
1
0
5
4
3
1
2
3
0
Sample Output
6
0
题目大意:给出一串数字求冒泡排序的次数。
思路:可以用归并排序做,因为我刚看树状数组,而这个就是求逆序对的和,所以下面用树状数组的方法求解。并在代码上给出详细注释。
#include<cstdio>#include<algorithm>#include<cstring>using namespace std;typedef long long LL;const int maxn=500005;int c[maxn],n;//存树状数组,n表示点数,从1开始int b[maxn];//存离散化后的数组struct node{ int val,id;}a[maxn];//存原始数据bool cmp(node a,node b){ return a.val<b.val;} //树状数组的三个函数int lowbit(int x){ return x&(-x);}void update(int x,int d)//在x处加d{ for(;x<=n;x+=lowbit(x)) c[x]+=d;}int getsum(int x){ int sum=0; for(;x>0;x-=lowbit(x)) sum+=c[x]; return sum;} int main(){ while(~scanf("%d",&n)&&n) { for(int i=1;i<=n;i++) { scanf("%d",&a[i].val); a[i].id=i; } //离散化 sort(a+1,a+n+1,cmp); for(int i=1;i<=n;i++) b[a[i].id]=i; memset(c,0,sizeof(c)); LL ans=0; for(int i=1;i<=n;i++)//用树状数组求逆序数 { update(b[i],1); ans+=i-getsum(b[i]); } printf("%lld\n",ans); } return 0;}
- POJ
- poj
- POJ
- POJ
- poj
- poj
- POJ
- POJ
- poj
- POJ
- POJ
- POJ
- POJ
- POJ
- POJ
- POJ
- POJ
- POJ
- WKWebView 初窥-JS交互探究
- scrapy安装报错
- 阿里RocketMq试用记录+简单的Spring集成
- Spring 整合 RocketMQ
- 二叉树中的排序树,Java版
- (POJ
- 走心安利: 工作中简单易用的开发工具
- Mac版IDEA入门
- SpringMVC统一异常处理 返回JSON解决方案
- Unity 3D
- angularjs 做一个笔记本
- deep learning 调试
- 记录一下spring的设置注入 构造器注入
- sklearn 数据加载,数据归一,特征选择,逻辑回归,贝叶斯,k近邻,决策树,SVM