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. Wannafly挑战赛5 A珂朵莉与宇宙 前缀和+枚举平方数

    Wannafly挑战赛5 A珂朵莉与宇宙 前缀和+枚举平方数 题目描述 给你一个长为n的序列a,有n*(n+1)/2个子区间,问这些子区间里面和为完全平方数的子区间个数 输入描述: 第一行一个数n 第 ...

  2. 分组密码CBC加密缺陷

    title: 分组密码CBC加密缺陷 date: 2017-05-15 10:04:47 tags: ["密码学"] --- 关于密码学的种种漏洞以及利用网上也有不少,但是比较零散 ...

  3. 《自拍教程9》Python编程风格规范

    Python编程风格规范 根据Python官方提供的Python编程风格规范: Style Guide for Python Code, 即PEP8规范, https://www.python.org ...

  4. 获取本机网卡ip地址

    import sys, os import socket, struct, fcntl import six import psutil def get_ip(iface="enp0s3&q ...

  5. Kvm 简介 安装 使用 桥接网络

    KVM 全称是 基于内核的虚拟机(Kernel-based Virtual Machine),它是一个 Linux 的一个内核模块,该内核模块使得 Linux 变成了一个 Hypervisor: 它由 ...

  6. zabbix-proxy配置文件参数说明

    配置文件路径: /etc/zabbix/zabbix_proxy.conf Server=10.0.0.10 #<===指定zabbix server的ip地址或主机名 Hostname=zab ...

  7. 让div充满整个body

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. js面试相关

    〇,字符串,数值,数组的转化 (0)检测数据类型 参考连接:http://www.cnblogs.com/onepixel/p/5126046.html 1,, typeof 操作符 :  能检测到( ...

  9. C++ Primer 抄书笔记(一)

    操作系统通过调用main函数(function)来运行C++程序: int main(){ ; } main函数返回类型必为int.大多数系统中main的返回值被用来指示状态.0即成功:非0由系统定义 ...

  10. BigDecimal精确计算工具类

    前言 在实际开发中,遇到例如货币,统计等商业计算的时候,一般需要采用java.math.BigDecimal类来进行精确计算.而这类操作通常都是可预知的,也就是通用的.所以,写了个工具类来方便以后的工 ...