题意:n个数 m个询问  ($n、m \le 10^5$)

每个询问有l, r, k  问的是[l, r]区间内有多少个数小于等于k

用主席树做的话查询第i小的数与k比较即可

  1 #define lson l, m
  2 #define rson m+1, r
  3 const int N=1e5+5;
  4 int L[N<<5], R[N<<5], sum[N<<5];
  5 int tot;
  6 int a[N], T[N], Hash[N];
  7 int build(int l, int r)
  8 {
  9     int rt=(++tot);
 10     sum[rt]=0;
 11     if(l<r)
 12     {
 13         int m=(l+r)>>1;
 14         L[rt]=build(lson);
 15         R[rt]=build(rson);
 16     }
 17     return rt;
 18 }
 19
 20 int update(int pre, int l, int r, int x)
 21 {
 22     int rt=(++tot);
 23     L[rt]=L[pre], R[rt]=R[pre], sum[rt]=sum[pre]+1;
 24     if(l<r)
 25     {
 26         int m=(l+r)>>1;
 27         if(x<=m)
 28             L[rt]=update(L[pre], lson, x);
 29         else
 30             R[rt]=update(R[pre], rson, x);
 31     }
 32     return rt;
 33 }
 34
 35 int query(int u, int v, int l, int r, int k)
 36 {
 37     if(l>=r)
 38         return l;
 39     int m=(l+r)>>1;
 40     int num=sum[L[v]]-sum[L[u]];
 41     if(num>=k)
 42         return query(L[u], L[v], lson, k);
 43     else
 44         return query(R[u], R[v], rson, k-num);
 45 }
 46
 47 int main()
 48 {
 49     int t, ca=1;
 50     scanf("%d", &t);
 51     while(t--)
 52     {
 53         tot=0;
 54         int n, m;
 55         scanf("%d%d", &n, &m);
 56         for(int i=1; i<=n; i++)
 57         {
 58             scanf("%d", &a[i]);
 59             Hash[i]=a[i];
 60         }
 61         sort(Hash+1, Hash+n+1);
 62         int d=unique(Hash+1, Hash+n+1)-Hash-1;
 63         T[0]=build(1, d);
 64         for(int i=1; i<=n; i++)
 65         {
 66             int x=lower_bound(Hash+1, Hash+d+1, a[i])-Hash;
 67             T[i]=update(T[i-1], 1, d, x);
 68         }
 69         printf("Case %d:\n", ca++);
 70         while(m--)
 71         {
 72             int l, r, k;
 73             scanf("%d%d%d", &l, &r, &k);
 74             l++, r++;
 75             int ll=1, rr=r-l+1;
 76             int ans=0;
 77             while(ll<=rr)
 78             {
 79                 int mm=(ll+rr)>>1;
 80                 int tmp=Hash[query(T[l-1], T[r], 1, d, mm)];
 81                 if(tmp<=k)
 82                 {
 83                     if(mm==r-l+1 || Hash[query(T[l-1], T[r], 1, d, mm+1)]>k)
 84                     {
 85                         ans=mm;
 86                         break;
 87                     }
 88                     ll=mm+1;
 89                 }
 90                 else
 91                 {
 92                     if(mm==1 || Hash[query(T[l-1], T[r], 1, d, mm-1)]<=k)
 93                     {
 94                         ans=mm-1;
 95                         break;
 96                     }
 97                     rr=mm-1;
 98                 }
 99             }
100             printf("%d\n", ans);
101         }
102     }
103     return 0;
104 }

HDOJ 4417

转载于:https://www.cnblogs.com/Empress/p/4662665.html

[主席树]HDOJ4417 Super Mario相关推荐

  1. HDOJ 4417 Super Mario

    划分树+二分 Super Mario Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Other ...

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

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

  3. HDU4417 Super Mario (主席树模板)

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

  4. #HDU 4417 Super Mario (主席树 + 二分)

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

  5. HDU4417 Super Mario(离线树状数组或者主席树+二分)

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

  6. Super Mario HDU - 4417(主席树解决区间数字小于k的个数||线段树+离线)

    Mario is world-famous plumber. His "burly" figure and amazing jumping ability reminded in ...

  7. 【HDU - 4417】Super Mario(查询区间小于K的数的个数,主席树)

    题干: Mario is world-famous plumber. His "burly" figure and amazing jumping ability reminded ...

  8. HDU-4417 Super Mario (主席树)

    Mario is world-famous plumber. His "burly" figure and amazing jumping ability reminded in ...

  9. HDU 4417 Super Mario(线段树离线处理/主席树)

    Mario is world-famous plumber. His "burly" figure and amazing jumping ability reminded in ...

  10. Super Mario(主席树)

    Mario is world-famous plumber. His "burly" figure and amazing jumping ability reminded in ...

最新文章

  1. 使php支持mbstring库以及使用
  2. 如何确定敏捷是否适合你的团队?
  3. 七十四、SpringBoot 的数据缓存cache(一)
  4. python脚本:向表中插入新数据,删除表中最旧的数据
  5. win7无法打开设备和打印机
  6. 1.5编程基础之循环控制_41数字统计
  7. 三星Galaxy A73显示Geekcbench:或搭载骁龙778G
  8. 【Elasticsearch】Elasticsearch的IndexSorting:一种查询性能优化利器
  9. tesseract ocr 5.0 Api调用,delphi源码实现--识别率超高速度快
  10. 金融行业数据容灾架构中的数据复制技术
  11. CSS在Mac /Win上兼容显示
  12. 空洞卷积(Atrous/Dilated Convolution)
  13. 机器学习(一)——基础概念
  14. easyRtc设置视频清晰度的方法
  15. JVM 深入笔记(1)内存区域是如何划分的?
  16. 无聊到能吓死一湾人的鬼畜代码
  17. 2021首届-西部云安全峰会来了!9月26日西安见
  18. python tab键_python中tab键是什么意思
  19. poss八十七氟癸基/白色粉末状/溶于氟类树脂/自修复超疏水材料
  20. PKCS及PKCS 15个标准, Public-Key Cryptography Standards

热门文章

  1. 讨论:寺庙和尚义工不宜说感谢,可以祝福
  2. 南半球左撇子的人是否多一些
  3. 假疫苗事件,错在企业,责任在管理部门
  4. mysql union 别名报错_浅析mysqlunion和unionall
  5. mysql日期格式转换_MySQL日期格式转换
  6. C++调用其他语言(C#、java、python)
  7. html5 video mute按钮,How to mute an html5 video player
  8. 实现带有拉普拉斯修正的朴素贝叶斯_数据科学 | 算法工程师必备的机器学习贝叶斯分类器...
  9. python网络编程第三版网盘_Python网络编程(socketserver、TFTP云盘、HTTPServer服务器模型)...
  10. java中return提醒不兼容的_JAVA报return为不兼容类型