HDU 5775 Bubble Sort(BIT)
来源:互联网 发布:linux echo 颜色 编辑:程序博客网 时间:2024/05/16 09:00
Description
P序列是一个1~n的重排,现在对P序列进行如下操作,问1~n每个数在操作过程中能到达的最右边位置与最左边位置之差是多少
for(int i=1;i<=N;++i)
for(int j=N,t;j>i;—j)
if(P[j-1] > P[j])
t=P[j],P[j]=P[j-1],P[j-1]=t;
Input
第一行一整数T表示用例组数,每组用例首先输入一整数n表示序列长度,之后n个整数表示P序列(T<=20,1<=n<=10^5)
Output
Sample Input
2
3
3 1 2
3
1 2 3
Sample Output
Case #1: 1 1 2
Case #2: 0 0 0
Solution
ans[a[i]]=max(a[i],i+i右边比a[i]小的数的数量)-min(a[i],i)
从后往前把该序列的数一个个插到树状数组中即可求出每个数右边比其小的数的个数,时间复杂度O(nlogn)
Code
#include<cstdio>#include<iostream>#include<cstring>#include<algorithm>using namespace std;#define maxn 111111struct BIT { #define lowbit(x) (x&(-x)) int b[maxn]; void init() { memset(b,0,sizeof(b)); } void update(int x,int v) { while(x<maxn) { b[x]+=v; x+=lowbit(x); } } int query(int x) { int ans=0; while(x) { ans+=b[x]; x-=lowbit(x); } return ans; }};int T,n,a[maxn],Case=1,ans[maxn];BIT bit;int main(){ scanf("%d",&T); while(T--) { scanf("%d",&n); for(int i=1;i<=n;i++)scanf("%d",&a[i]); bit.init(); for(int i=n;i>=1;i--) { int temp=bit.query(a[i]); ans[a[i]]=max(a[i],i+temp)-min(a[i],i); bit.update(a[i],1); } printf("Case #%d:",Case++); for(int i=1;i<=n;i++)printf(" %d",ans[i]); printf("\n"); } return 0;}
0 0
- HDU 5775 Bubble Sort(BIT)
- Hdu-5775 Bubble Sort
- HDU 5775 Bubble Sort
- hdu 5775 Bubble Sort
- HDU 5775 Bubble Sort
- hdu 5775 Bubble sort
- HDU 5775 Bubble Sort
- hdu 5775 Bubble Sort
- 【HDU】5775 Bubble Sort
- HDU 5775 Bubble Sort
- HDU 5775 Bubble Sort(逆序对)
- HDU-5775-Bubble Sort(线段树)
- HDU 5775 (Bubble Sort 逆序数)
- HDU - 5775 Bubble Sort(树状数组)
- HDU 5775 Bubble Sort(树状数组)
- HDU 5775 Bubble Sort (树状数组或线段树)
- HDU 5775 Bubble Sort(冒泡排序的位置变换)
- hdu 5775 Bubble Sort 树状数组(多校)
- Android 5.x 权限问题解决方法
- python MySQL 写入excel
- 一、还原项目之前的状态(不小心删除必要的文件代码)以及动态获取新浪微博授权码
- golang: 常用数据类型底层结构分析
- java matcher类的概念简单总结
- HDU 5775 Bubble Sort(BIT)
- JAVA使用JDBC连接MySQL数据库
- Junit4参数化测试实现程序与用例数据分离
- ES6(ECMAScript 6 ) 箭头函数以及js中的this
- Openstack liberty 云主机迁移源码分析之在线迁移3
- JFreeChart仪表图DialChartDemo2
- sql与oracle中有关case和decode的用法(行转列)及比较
- Eclipse中在项目右键菜单点击->Maven->Update Projects时,JDK总是切回 1.5
- Android Junit Test Process