题意略。

思路:

仔细思考这个题目会发现,它其实是要你查询两次,第一是要规定l,r的范围,第二是要在范围内查询小于等于H的个数。所以有的人说要用主席树。

现在,如果我们能省去范围内对h的查询呢?也就是说,在查询范围时,我们就要保证这个范围内的所有hi都小于等于H的数字。

我们可以离线地来做。这样就只需要树状数组了,不再需要主席树了。

详见代码:

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. const int maxn = 1e5 + ;
  4.  
  5. struct node{
  6. int idx,numb;
  7. node(int idx = ,int numb = ){
  8. this->idx = idx;
  9. this->numb = numb;
  10. }
  11. };
  12. struct query{
  13. int l,r,h,id;
  14. query(int l = ,int r = ,int h = ,int id = ){
  15. this->l = l,this->r = r,this->h = h;
  16. this->id = id;
  17. }
  18. };
  19.  
  20. node store[maxn];
  21. query depot[maxn];
  22. int BIT[maxn],n,m,ans[maxn];
  23.  
  24. bool cmp1(const node& n1,const node& n2){
  25. return n1.numb < n2.numb;
  26. }
  27. bool cmp2(const query& q1,const query& q2){
  28. return q1.h < q2.h;
  29. }
  30. int lowbit(int k){
  31. return (k & -k);
  32. }
  33. void add(int pos,int val){
  34. while(pos <= n){
  35. BIT[pos] += val;
  36. pos += lowbit(pos);
  37. }
  38. }
  39. int sum(int pos){
  40. int ret = ;
  41. while(pos > ){
  42. ret += BIT[pos];
  43. pos -= lowbit(pos);
  44. }
  45. return ret;
  46. }
  47.  
  48. int main(){
  49. int T,cas = ;
  50. scanf("%d",&T);
  51. while(T--){
  52. scanf("%d%d",&n,&m);
  53. memset(BIT,,sizeof(BIT));
  54. for(int i = ;i <= n;++i){
  55. scanf("%d",&store[i].numb);
  56. store[i].idx = i;
  57. }
  58. sort(store + ,store + + n,cmp1);
  59. for(int i = ;i < m;++i){
  60. scanf("%d%d%d",&depot[i].l,&depot[i].r,&depot[i].h);
  61. depot[i].id = i;
  62. depot[i].l += ;
  63. depot[i].r += ;
  64. }
  65. sort(depot,depot + m,cmp2);
  66. int last = ;
  67. for(int i = ;i < m;++i){
  68. int h = depot[i].h,l = depot[i].l;
  69. int r = depot[i].r,id = depot[i].id;
  70. for(;last <= n && store[last].numb <= h;++last)
  71. add(store[last].idx,);
  72. int t = sum(r) - sum(l - );
  73. ans[id] = t;
  74. }
  75. printf("Case %d:\n",cas++);
  76. for(int i = ;i < m;++i)
  77. printf("%d\n",ans[i]);
  78. }
  79. return ;
  80. }

HDU 4417的更多相关文章

  1. HDU 4417 Super Mario(主席树求区间内的区间查询+离散化)

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

  2. Super Mario HDU 4417 主席树区间查询

    Super Mario HDU 4417 主席树区间查询 题意 给你n个数(编号从0开始),然后查询区间内小于k的数的个数. 解题思路 这个可以使用主席树来处理,因为这个很类似查询区间内的第k小的问题 ...

  3. J - Super Mario HDU - 4417 线段树 离线处理 区间排序

    J - Super Mario HDU - 4417 这个题目我开始直接暴力,然后就超时了,不知道该怎么做,直接看了题解,这个习惯其实不太好. 不过网上的思路真的很厉害,看完之后有点伤心,感觉自己应该 ...

  4. HDU 4417 (划分树+区间小于k统计)

    题目链接:  http://acm.hdu.edu.cn/showproblem.php?pid=4417 题目大意:给定一个区间,以及一个k值,求该区间内小于等于k值的数的个数.注意区间是从0开始的 ...

  5. HDU 4417:Super Mario(主席树)

    http://acm.hdu.edu.cn/showproblem.php?pid=4417 题意是:给出n个数和q个询问,每个询问有一个l,r,h,问在[l,r]这个区间里面有多少个数是小于等于h的 ...

  6. [HDU 4417] Super Mario (树状数组)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4417 题目大意:给你n个数,下标为0到n-1,m个查询,问查询区间[l,r]之间小于等于x的数有多少个 ...

  7. hdu 4417 Super Mario/树套树

    原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=4417 题意很简单,给定一个序列求一个区间 [L, R,]中小于等于H的元素的个数. 好像函数式线段树可 ...

  8. hdu 4417 Super Mario (主席树)

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=4417 题意: 给你段长为n的序列,有q个询问,每次询问区间[l.r]内有多少个数小于等于k 思路: 之前用 ...

  9. [hdu 4417]树状数组+离散化+离线处理

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4417 把数字离散化,一个查询拆成两个查询,每次查询一个前缀的和.主要问题是这个数组是静态的,如果带修改 ...

  10. HDU 4417 【线段树+离线处理】

    http://acm.hdu.edu.cn/showproblem.php?pid=4417 题意:找出给定区间内,有多少个数小于等于给定的数.用线段树维护的话会超时,要用到线段树的离线操作,对询问与 ...

随机推荐

  1. docker原理介绍

    内部分享的ppt,做的有些粗糙... 个人使用的总结,如有错误,多多指正!

  2. Redis的HelloWorld

    1.安装完成的Redis: linux安装的应用默认会在:usr/local/bin. 1.redis-benchmark:性能测试工具,是redis提供的一个高并发程序,可以在自己本机运行,看看自己 ...

  3. Log4Net 配置日志按日期和日志级别分类写入

    配置效果图: 配置代码: <?xml version="1.0" encoding="utf-8" ?> <log4net> <! ...

  4. Ubuntu+VMWare 学习中遇到的问题

    1. 虚拟机中Ubuntu分辨率 / 设置分辨率出现Unknown Display VMware中Ubuntu 出现Unknown Display问题解决 1.1 命令无法保存分辨率设置: xrand ...

  5. maven的编译规范

    maven的中央仓库上的jar的包名必须小写.否则maven编译不通过. 如:Memcached-Java-Client-3.0.2 的jar包. 目录如下: com.whalin.memcached ...

  6. Python基础总结之异常、调试代码第十二天开始(新手可相互督促)

    年薪20万的梦想,加油! 我们在写代码的时候,控制台经常会报错,因为某种错误,导致我们的程序停止,且不再运行下面的代码. 我们看一个错误的代码示例: def add_1(): #没有参数 print( ...

  7. django数据库事务

    数据库原子操作 举个例子: 一个消费者在一个商户里刷信用卡消费,交易正常时,银行在消费者的账户里减去相应的款项,在商户的帐户加上相应的款项.但是如果银行从消费者的账户里扣完钱之后,还未在商户的帐户里加 ...

  8. python使用pip安装第三方库以及镜像使用豆瓣源安装第三方库

    2018/8/7  在使用pip安装pynum第三方库时的随笔 所有的前提都是你成功安装了pip 首先第一步 打开命令提示符  输入pip show pip 查看当前pip版本 然后可以上官网搜索一下 ...

  9. 客户端埋点实时OLAP指标计算方案

    背景 产品经理想要实时查询一些指标数据,在新版本的APP上线之后,我们APP的一些质量指标,比如课堂连接掉线率,课堂内崩溃率,APP崩溃率等指标,以此来看APP升级之后上课的体验是否有所提升,上课质量 ...

  10. 【kafka】一、消息队列

    在高并发的应用场景中,由于来不及同步处理请求,接收到的请求往往会发生阻塞.例如,大量的插入.更新请求同时到达数据库,这会导致行或表被锁住,最后会因为请求堆积过多而触发“连接数过多的异常” 的错误.因此 ...