题意:给定 n个数,查询 位置L R内 小于x的数有多少个。

对于某一次查询 把所有比x小的数 ”的位置“ 都加入到树状数组中,然后sum(R)-sum(L-1)就是答案,q次查询就要离线操作了,按高度排序。

  1. #include <set>
  2. #include <map>
  3. #include <cmath>
  4. #include <ctime>
  5. #include <queue>
  6. #include <stack>
  7. #include <cctype>
  8. #include <cstdio>
  9. #include <string>
  10. #include <vector>
  11. #include <cstdlib>
  12. #include <cstring>
  13. #include <iostream>
  14. #include <algorithm>
  15. using namespace std;
  16. typedef unsigned long long ull;
  17. typedef long long ll;
  18. const int inf = 0x3f3f3f3f;
  19. const double eps = 1e-;
  20. template <class T>
  21. inline bool scan_d(T &ret)
  22. {
  23. char c;
  24. int sgn;
  25. if(c=getchar(),c==EOF)
  26. return ;
  27. while(c!='-'&&(c<''||c>'')) c=getchar();
  28. sgn = (c=='-')?-:;
  29. ret =(c=='-')?:(c-'');
  30. while(c=getchar(),c>=''&&c<='') ret=ret*+(c-'');
  31. ret*=sgn;
  32. return ;
  33. }
  34. const int maxn = 1e5+;
  35. int n,q,c[maxn];
  36. int lowbit (int x)
  37. {
  38. return x & -x;
  39. }
  40. void add(int x,int d)
  41. {
  42. while (x <= n)
  43. {
  44. c[x] += d;
  45. x += lowbit(x);
  46. }
  47. }
  48. int sum(int x)
  49. {
  50. int ans = ;
  51. while (x > )
  52. {
  53. ans += c[x];
  54. x -= lowbit(x);
  55. }
  56. return ans;
  57. }
  58. struct Node1
  59. {
  60. int v,index;
  61. }h[maxn];
  62. struct Node2
  63. {
  64. int l,r,v,index,ans;
  65. }H[maxn];
  66. bool cmp1(const Node1 &n1,const Node1 &n2)
  67. {
  68. return n1.v < n2.v;
  69. }
  70. bool cmp2(const Node2 &n1,const Node2 &n2)
  71. {
  72. return n1.v < n2.v;
  73. }
  74. bool cmp3(const Node2 &n1,const Node2 &n2)
  75. {
  76. return n1.index < n2.index;
  77. }
  78. int main(void)
  79. {
  80. #ifndef ONLINE_JUDGE
  81. freopen("in.txt","r",stdin);
  82. #endif
  83. int t,cas = ;
  84. scanf ("%d",&t);
  85. while (t--)
  86. {
  87. memset(c,,sizeof(c));
  88. scanf ("%d%d",&n,&q);
  89. for (int i = ; i <= n; i++)
  90. {
  91. scanf ("%d",&h[i].v);
  92. h[i].index = i;
  93. }
  94. sort(h+,h+n+,cmp1);
  95. for (int i = ; i <= q; i++)
  96. {
  97. scanf ("%d%d%d",&H[i].l,&H[i].r,&H[i].v);
  98. H[i].l++;
  99. H[i].r++;
  100. H[i].index = i;
  101. }
  102. sort(H+,H+q+,cmp2);
  103. int j = ;
  104. for (int i = ; i <= q; i++)
  105. {
  106. int tmp = H[i].v;
  107. while (h[j].v <= tmp&&j<=n) //这里要加j<=n 不然会死循环
  108. {
  109. add(h[j].index,);
  110. j++;
  111. }
  112. H[i].ans = sum(H[i].r) - sum(H[i].l-);
  113. }
  114. sort(H+,H+q+,cmp3);
  115. printf("Case %d:\n",cas++);
  116. for (int i = ; i <= q; i++)
  117. {
  118. printf("%d\n",H[i].ans);
  119. }
  120. }
  121. return ;
  122. }

HDU---4417Super Mario 树状数组 离线操作的更多相关文章

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

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

  2. HDU 4630 No Pain No Game 树状数组+离线操作

    题意:给一串数字,每次查询[L,R]中两个数的gcd的最大值. 解法:容易知道,要使取两个数让gcd最大,这两个数最好是倍数关系,所以处理出每个数的所有倍数,两两间根据倍数关系形成一条线段,值为该数. ...

  3. hdu 3333(树状数组 + 离线操作)

    Turing Tree Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  4. Super Mario 树状数组离线 || 线段树

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

  5. HDU 2838 (DP+树状数组维护带权排序)

    Reference: http://blog.csdn.net/me4546/article/details/6333225 题目链接: http://acm.hdu.edu.cn/showprobl ...

  6. HDU 2689Sort it 树状数组 逆序对

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

  7. hdu 4046 Panda 树状数组

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4046 When I wrote down this letter, you may have been ...

  8. HDU3874Necklace(树状数组+离线操作)

    此题的大意思说有一串珠子,每个珠子都有自己的欣赏值value,现在给你一串珠子每个的欣赏值,并给出一些询问,查询某个区间内部总欣赏值是多少,但是有一个约定就是如果这个区间内部有两个珠子的欣赏值是一样的 ...

  9. hdu 5497 Inversion 树状数组 逆序对,单点修改

    Inversion Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5497 ...

随机推荐

  1. Css定位-定位

    在CSS中一共有N种定位方式,其中,static ,relative,absolute三种方式是最基本最常用的三种定位方式.他们的基 本介绍如下. static默认定位方式 relative相对定位, ...

  2. MYSQL常用操作函数的封装

    1.mysql常用函数封装文件:mysql.func.php <?php /** * 连接MYSQL函数 * @param string $host * @param string $usern ...

  3. 在Eclipse里设置格式化代码时不格式化注释

    在Eclipse里设置格式化代码时不格式化注释 今天格式化代码 发现直接format会把注释也一块格式化了,有时候会把好好的注释弄的很乱.甚为头疼. 查阅之后解决办法如下: Windows -> ...

  4. (转)iOS分类和扩展(Categories和Extensions)

    分类(Category)   分类能够做到的事情主要是:即使在你不知道一个类的源码情况下,向这个类添加扩展的方法.   此外,分类能够保证你的实现类和其他的文件区分开. #import “UIView ...

  5. 你需要知道的九大排序算法【Python实现】之堆排序

    六.堆排序 ​堆排序是一种树形选择排序,是对直接选择排序的有效改进. ​堆的定义下:具有n个元素的序列 (h1,h2,...,hn),当且仅当满足(hi>=h2i,hi>=2i+1)或(h ...

  6. 高性能WEB开发(11) - flush让页面分块,逐步呈现

    高性能WEB开发(11) - flush让页面分块,逐步呈现 在处理比較耗时的请求的时候,我们总希望先让用户先看到部分内容,让用户知道系统正在进行处理,而不是无响应.一般大家在处理这样的情况,都使用a ...

  7. JavaScript中的面向对象的讨论(转)

    前言 今天,WEB2.0时代的到来,给了JavaScript又一次大展身手的机会.Web2.0借助JavaScript技术,使得客户端的Web体验更加丰富多彩,同时JavaScript面对的问题域也变 ...

  8. Android 推断当前Activity是不是最后一个Activity 以及 应用或Activity是否存在

    推断当前Activity是最后一个Activity: 在Activity的方法中, 有一个方法isTaskRoot()方法, 这种方法能够推断当前Activity是否是最后一个Activity, 假 ...

  9. hexo博客的优化与配置——加入统计代码

    今天看着csdn博客的訪客数,就想给hexo博客也加入统计訪客的插件,上次折腾了个pacman主题,中间自带的是goole的统计,easy被墙,所以就想换一个统计工具,看了好多人用的都是cnzz的站长 ...

  10. Python之基础(一)

    数学计算 要利用相关的数学计算函数,首先需要把数学模块包含进来: >>>import math 进行计算: >>> math.pi 3.14159265358979 ...