1. //每个数字只会被它后面的比它小的数字影响,且会向右移动相应个数的位置
  2. //比如:6 4 3 5 2 1 。4后面比它小的有 三个,因此它的最右边位置就是当前位置 +3,即5
  3. //如果该数字本身在标准位置左边,那无须考虑,初始位置就是最左端
  4. //如果它在标准位置右边,我们可以知道,它最终肯定要回到标准位置,所以最左边应该为标准位置。
  5. #include<iostream>
  6. #include<cstring>
  7. using namespace std;
  8. const int N=;
  9. int a[N];
  10. int ans[N];
  11. int tr[N];
  12. int cnt;
  13. int lowbit(int x)
  14. {
  15. return x&-x;
  16. }
  17. void add(int x,int p)
  18. {
  19. for(int i=x;i<=N;i+=lowbit(i))
  20. tr[i]+=p;
  21. }
  22. int sum(int x)
  23. {
  24. int res=;
  25. for(int i=x;i;i-=lowbit(i))
  26. res+=tr[i];
  27. return res;
  28. }
  29. int main()
  30. {
  31. int t;
  32. cin>>t;
  33. while(t--)
  34. {
  35. int n;
  36. cin>>n;
  37. memset(a,,sizeof a);
  38. memset(ans,,sizeof ans);
  39. memset(tr,,sizeof tr);
  40. //输入初始的位置
  41. for(int i=;i<=n;i++)
  42. cin>>a[i];
  43. for(int i=n;i;i--)
  44. {
  45. //从后往前
  46. //比这个数小的
  47. int res=sum(a[i]);
  48. //如果该数字本身在标准位置左边,那无须考虑,初始位置就是最左端
  49. ans[a[i]]=res;
  50. //插入该数字到标准位置
  51. add(a[i],);
  52. }
  53. //初始位置在标准位置右边,最左端为标准位置,更新|left - right|
  54. //a[i]应该在a[i]的位置,但是现在的位置是i,且i>=a[i],说明在标准位置的右边
  55. //那么最左端就是标准位置,
  56. for(int i=;i<=n;i++)
  57. if(i>=a[i])
  58. ans[a[i]]+=(i-a[i]);
  59. cout<<"Case #"<<++cnt<<":";
  60. for(int i=;i<=n;i++)
  61. cout<<" "<<ans[i];
  62. cout<<endl;
  63. }
  64. }

Bubble Sort HDU - 5775 树状数组的更多相关文章

  1. HDU 5775 树状数组

    Bubble Sort Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total ...

  2. hdu 4638 树状数组 区间内连续区间的个数(尽可能长)

    Group Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Subm ...

  3. hdu 4777 树状数组+合数分解

    Rabbit Kingdom Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) T ...

  4. HDU 2689 Sort it【树状数组】

    Sort it Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Sub ...

  5. HDU 4911 (树状数组+逆序数)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4911 题目大意:最多可以交换K次,就最小逆序对数 解题思路: 逆序数定理,当逆序对数大于0时,若ak ...

  6. hdu 5792(树状数组,容斥) World is Exploding

    hdu 5792 要找的无非就是一个上升的仅有两个的序列和一个下降的仅有两个的序列,按照容斥的思想,肯定就是所有的上升的乘以所有的下降的,然后再减去重复的情况. 先用树状数组求出lx[i](在第 i ...

  7. 2018 CCPC网络赛 1010 hdu 6447 ( 树状数组优化dp)

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=6447 思路:很容易推得dp转移公式:dp[i][j] = max(dp[i][j-1],dp[i-1][j ...

  8. HDU 2852 (树状数组+无序第K小)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2852 题目大意:操作①:往盒子里放一个数.操作②:从盒子里扔掉一个数.操作③:查询盒子里大于a的第K小 ...

  9. hdu 3450 树状数组

    思路:二分查找位置,之后是裸的树状数组. #include<set> #include<map> #include<cmath> #include<queue ...

随机推荐

  1. 利用视频解析网站免费观看各大平台VIP电影

    需求: 观看VIP电影.VIP电视 准备: 1.视频解析网站 2.VIP电影URL 教程开始: 1.百度搜索[视频解析],会索引出大量的视频解析网站,随便选择一个网站. 2.找到想观看的VIP视频,复 ...

  2. Generator - Python 生成器

    Generator, python 生成器, 先熟悉一下儿相关定义, generator function 生成器函数, 生成器函数是一个在定义体中存有 'yield' 关键字的函数. 当生成器函数被 ...

  3. JAVA System.exit(0) 和 System.exit(1) 的区别

    System.exit(int state) 方法都是来结束当前运行的java虚拟机.所有System.exit(1).System.exit(0) 执行后都会退出程序. state为0时时正常退出, ...

  4. Linux的那些事-系统启动(增加开机启动项)

    1   /etc/init.d 2   /etc/inittab 3   /etc/rc.d/init.d  1.   /etc/init.d 是一般开机的启动服务存放在这个目录下,至于实现机制,其实 ...

  5. [Python-memcached]Python操作memcached

    安装python-memchached插件 pip install python-memcached Collecting python-memcached Downloading python_me ...

  6. FTP服务器配置http访问(配置nginx+ftp服务器)

    一.搭建nginx服务器 先安装nginx服务器 # yum install nginx -y 启动nginx服务 # systemctl start nginx 浏览器访问:http://192.1 ...

  7. 【React Native】使用react-native-wechat 进行微信好友、微信朋友圈进行分享

    前提:微信平台注册,请自行百度.本篇主要是针对react native中使用react-native-wechat进行android端的分享. 1.Android版本安装配置方法 在android/s ...

  8. linux中vim使用技巧

    一.导入文件内容 :r 解释 导入文件 示例 编辑模式下 # 将/tmp/test.txt内容导入到光标所在的位置的下一行 :r /tmp/test.txt :! 解释 在编辑文件时,执行系统命令 示 ...

  9. 安装nanomsg

    xftp上传nanomsg安装包 1.解压安装包tar -xvf nanomsg-1.1.0.tar 进入目录cd nanomsg-1.1.0新建安装目录(在nanomsg-1.1.0目录下)mkdi ...

  10. 关于PHP连接上MySQL但不能插入数据

    出现这种情况,有三种可能 1.SQL语句有问题 insert into table_name(field1,field2...) values(value1,value2...); 先在MySQL中粘 ...