博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu_5775_Bubble Sort(树状数组)
阅读量:4975 次
发布时间:2019-06-12

本文共 1015 字,大约阅读时间需要 3 分钟。

题目链接:

题意:

让你找每一个数在冒泡排序中最右边和最左边的位置的差值

题解:

还是官方题解,讲的已经很清楚了

1012 Bubble Sort

考虑一个位置上的数字c在冒泡排序过程的变化情况。c会被其后面比c小的数字各交换一次,之后c就会只向前移动。数组从右向左扫,树状数组维护一下得到每个值右边有多少个比其小的值,加上原位置得到最右位置,最左位置为初始位置和最终位置的最小值。

 

时间复杂度O(n lg n)

1 #include
2 #define mst(a,b) memset(a,b,sizeof(a)) 3 #define F(i,a,b) for(int i=a;i<=b;++i) 4 using namespace std; 5 6 const int N=1e5+7; 7 int ans[N],sum[N],n; 8 inline void add(int x,int c){
while(x<=n)sum[x]+=c,x+=x&-x;} 9 inline int ask(int x){
int an=0;while(x)an+=sum[x],x-=x&-x;return an;}10 11 int main(){12 int t,ic=1,tp;13 scanf("%d",&t);14 while(t--)15 {16 mst(sum,0);17 scanf("%d",&n);18 F(i,1,n)19 {20 scanf("%d",&tp);21 int mi=tp-ask(tp-1)-1;22 add(tp,1);23 ans[tp]=i+mi-min(tp,i);24 }25 printf("Case #%d:",ic++);26 F(i,1,n)printf(" %d",ans[i]);puts("");27 }28 return 0;29 }
View Code

 

转载于:https://www.cnblogs.com/bin-gege/p/5717569.html

你可能感兴趣的文章
通俗易懂之Tensorflow summary类 & 初识tensorboard
查看>>
python基础篇12-函数
查看>>
获取APP地图权限
查看>>
java反射机制获得类的私有属性
查看>>
[EntLib]微软企业库5.0 学习之路——第一步、基本入门 [转]
查看>>
[ExtJs6] 环境搭建及创建项目
查看>>
<译>Zookeeper官方文档
查看>>
Android sharedUserId 使用
查看>>
伟大架构师的秘密
查看>>
Select_full_join 与 Select_range_check 与Sort_merge_passes
查看>>
win32可以自定义消息
查看>>
四大域对象的作用范围
查看>>
Liferay7 BPM门户开发之43: Gradle依赖管理
查看>>
在webapp上使用input:file
查看>>
idea git 注意事项
查看>>
整理 iOS 9 适配中出现的坑(图文)(转)
查看>>
Hibernate继承映射(@Inheritance)
查看>>
Oracle、Microsoft SQL Server、Mysql
查看>>
iPhone入门学习——iPhone静态库学习笔记
查看>>
C# Winform 拷贝共享文件夹文件包含输入共享用户及密码
查看>>