题目链接:点击查看

题目大意:给出n个数,求出按照冒泡排序期间每个数可以到达的最右边位置和最左边位置的差

题目分析:其实这个题想明白了就很简单了,先用辅助数组a按照顺序存储每一个数,a[i]就代表排序完的位置,i就代表排序前的位置,按照冒泡排序的规则,可以知道,任意位置可以到达的最左边的位置,就是它排序前和排序后的位置中的最小值,而可以到达最右边的位置是取决于其右边有几个比它本身小的数,可以用树状数组求逆序数的原理来求,其实这个题也可以颠倒思路,即最右端是a[i]和i中的最大值,最左端是取决于其左边有几个比它本身大的数,直接上代码了:

#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<algorithm>
#include<stack>
#include<queue>
#include<map>
#include<sstream>
#include<cmath>
using namespace std;typedef long long LL;const int inf=0x3f3f3f3f;const int N=1e5+100;int c[N];LL l[N],r[N];int n;int lowbit(int x)
{return x&-x;
}void update(int pos)
{while(pos<=n){c[pos]++;pos+=lowbit(pos);}
}LL query(int pos)
{LL ans=0;while(pos){ans+=c[pos];pos-=lowbit(pos);}return ans;
}int a[N];int main()
{
//  freopen("input.txt","r",stdin);int w;cin>>w;int kase=0;while(w--){memset(c,0,sizeof(c));memset(l,0,sizeof(l));memset(r,0,sizeof(r));scanf("%d",&n);for(int i=1;i<=n;i++)scanf("%d",a+i);for(int i=1;i<=n;i++){l[a[i]]=min(i,a[i]);}for(int i=n;i>=1;i--){r[a[i]]=i+query(a[i]-1);update(a[i]);}printf("Case #%d:",++kase);for(int i=1;i<=n;i++)cout<<' '<<abs(l[i]-r[i]);cout<<endl;}return 0;
}

HDU - 5775 Bubble Sort(树状数组)相关推荐

  1. 2016 Multi-University Training Contest 4 Bubble Sort(树状数组模板)

    Bubble Sort 题意: 给你一个1~n的排列,问冒泡排序过程中,数字i(1<=i<=n)所到达的最左位置与最右位置的差值的绝对值是多少 题解: 数字i多能到达的最左位置为min(s ...

  2. HDU5775 Bubble Sort树状数组

    题目链接:HDU5775 Bubble Sort Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java ...

  3. HDU 5775 Bubble Sort(归并排序+逆序数)

    题目链接:HDU 5775 Bubble Sort                                                                           ...

  4. HDU - 5775 - Bubble Sort( 树状数组 + 思维 )

    题目链接:点击进入 题目 题意 问在给出的冒泡排序过程中,一个数到达的最右边位置与最左边位置距离差. 思路 对于一个数,位置 i ,假设右边比它小的数有 r 个,左边比它大的数有 l 个,最右边到达的 ...

  5. hdu 5775 Bubble Sort

    http://acm.hdu.edu.cn/showproblem.php?pid=5775 题意:让一列数进行冒泡排序,问排序过程中,最左边到最右边的差的绝对值. 思路:我感觉,这道题的难点就是用树 ...

  6. HDU ACM 4031 Attack (树状数组--单点查询+区间更新)

    http://acm.hdu.edu.cn/showproblem.php?pid=4031 用了树状数组的区间更新 单点查找(一般为单点更新 区间查找) 例如 区间(2,4)加1 则Updata(2 ...

  7. hdu 4417 Super Mario 树状数组||主席树

    Super Mario Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Prob ...

  8. HDU 4777 Rabbit Kingdom 树状数组

    分析:找到每一个点的左边离他最近的不互质数,记录下标(L数组),右边一样如此(R数组),预处理 这个过程需要分解质因数O(n*sqrt(n)) 然后离线,按照区间右端点排序 然后扫一遍,对于当前拍好顺 ...

  9. hdu 4125 Moles(kmp+树状数组)

    题目链接:hdu 4125 Moles 题意: 给你n个数,让你按键值建一个平衡二叉树,然后奇数为0,偶数为1,然后可以遍历这颗树得到一个欧拉序列,现在给你一个串,问你出现了几次. 题解: 建树的时候 ...

最新文章

  1. 【POCO】POCO学习总结(四)——MinGW编译poco
  2. Win2008 R2 RemoteApp深度体验之四,RemoteApp程序测试
  3. Spring Cloud Data Flow 中的 ETL
  4. 万字长文,解读“幕后产品”的核心观点
  5. java swing 串口_ComTest 接收串口数据,并显示在文本框内,通过JavaSwing实现 Develop 265万源代码下载- www.pudn.com...
  6. 人工智能技术在智能制造中的典型应用场景与标准体系研究
  7. c# npoi 2.5版本设置字体加粗_Python帮你做Excel——格式设置与画图
  8. 思科计算机网络技术第一章,cisco思科网络技术教程第一章.ppt
  9. Xcode dSYM 文件
  10. 如何快速入门PLC编程?
  11. AT89S52单片机之定时器/计数器
  12. linux用屏幕录制软件有哪些,Linux系统下推荐使用的5个屏幕录像软件是什么?
  13. 软件测试个人能力提升,软件测试人员提升测试技能的10个妙招分享
  14. 判断是否为非负数、小数点后两位
  15. 一台计算机两个硬盘怎么设置密码,怎样给硬盘加密码? 两招解决硬盘加密难题...
  16. oracle10g笔记1
  17. e480换高分屏_ThinkPadE480电脑(i5-8250u 8G内存 256G固态 高分屏0QCD 14英寸) 京东5699元...
  18. 螺纹检测案例-螺距测量-大径小径检测-螺牙检测
  19. 百度云“资源”被和谐,两行代码帮你解决
  20. java 医保接口对接_读:HIS 与医保系统的接入方案及实现

热门文章

  1. Nginx的Gzip模块配置指令(一)
  2. Protobuf序列化的原理-varint
  3. ConcurrentHashMap的源码分析-put方法第四阶段
  4. synchronized锁的升级
  5. 对HTTP/2 支持
  6. Redis高可用方案-RedisCluster-SpringBoot整合
  7. 日志规范之为什么要使用SLF4J
  8. 模板打印:代码实现和总结
  9. opengl 日地月运动模型_MaskFusion: 多运动目标实时识别、跟踪和重建
  10. php网页文字居中代码怎么写,html里文字居中代码怎么写?_WEB前端开发