题目链接:https://cn.vjudge.net/contest/284294#problem/A

题目大意:主席树查询区间第k小。

具体思路:主席树入门。

AC代码:

  1. #include<iostream>
  2. #include<stdio.h>
  3. #include<algorithm>
  4. #include<vector>
  5. using namespace std;
  6. # define ll long long
  7. const int maxn = 1e5+;
  8. struct node
  9. {
  10. int sum;
  11. int l,r;
  12. } tree[maxn*];
  13. int sto[maxn],root[maxn];
  14. vector<int>q;
  15. int tot;
  16. void init()
  17. {
  18. tot=;
  19. root[]=;
  20. }
  21. int get_id(int t)
  22. {
  23. return lower_bound(q.begin(),q.end(),t)-q.begin()+;
  24. }
  25. int add(int pre)
  26. {
  27. int t=++tot;
  28. tree[t].sum=tree[pre].sum+;
  29. tree[t].l=tree[pre].l;
  30. tree[t].r=tree[pre].r;
  31. return t;
  32. }
  33. void update(int &o,int pre,int l,int r,int pos)
  34. {
  35. o=add(pre);
  36. if(l==r)return ;
  37. int m=(l+r)>>;
  38. if(pos<=m)update(tree[o].l,tree[o].l,l,m,pos);
  39. else update(tree[o].r,tree[o].r,m+,r,pos);
  40. }
  41. int query(int st,int ed,int l,int r,int k){
  42. if(l==r)return r;
  43. int sum=tree[tree[ed].l].sum-tree[tree[st].l].sum;
  44. int m=(l+r)>>;
  45. if(k<=sum)return query(tree[st].l,tree[ed].l,l,m,k);
  46. else return query(tree[st].r,tree[ed].r,m+,r,k-sum);
  47. }
  48. int main()
  49. {
  50. int n,m;
  51. while(~scanf("%d %d",&n,&m))
  52. {
  53. init();
  54. for(int i=; i<=n; i++)
  55. {
  56. scanf("%d",&sto[i]);
  57. q.push_back(sto[i]);
  58. }
  59. sort(q.begin(),q.end());
  60. q.erase(unique(q.begin(),q.end()),q.end());
  61. int num=q.size();
  62. for(int i=; i<=n; i++)
  63. {
  64. update(root[i],root[i-],,num,get_id(sto[i]));
  65. }
  66. int t1,t2,k;
  67. while(m--){
  68. scanf("%d %d %d",&t1,&t2,&k);
  69. printf("%d\n",q[query(root[t1-],root[t2],,num,k)-]);
  70. }
  71. }
  72. return ;
  73. }

 

A - 低阶入门膜法 - K-th Number (主席树查询区间第k小)的更多相关文章

  1. B - 低阶入门膜法 - D-query (查询区间内有多少不同的数)

    题目链接:https://cn.vjudge.net/contest/284294#problem/B 题目大意:查询区间内有多少个不相同的数. 具体思路:主席树的做法,主席树的基础做法是查询区间第k ...

  2. HDU 5919 - Sequence II (2016CCPC长春) 主席树 (区间第K小+区间不同值个数)

    HDU 5919 题意: 动态处理一个序列的区间问题,对于一个给定序列,每次输入区间的左端点和右端点,输出这个区间中:每个数字第一次出现的位子留下, 输出这些位子中最中间的那个,就是(len+1)/2 ...

  3. poj 2104 主席树(区间第k大)

    K-th Number Time Limit: 20000MS   Memory Limit: 65536K Total Submissions: 44940   Accepted: 14946 Ca ...

  4. 主席树--动态区间第k小

    主席树--动态区间第\(k\)小 模板题在这里洛谷2617. 先对几个问题做一个总结: 阅读本文需要有主席树的基础,也就是通过区间kth的模板题. 静态整体kth: sort一下找第k小,时间复杂度\ ...

  5. poj2104&&poj2761 (主席树&&划分树)主席树静态区间第k大模板

    K-th Number Time Limit: 20000MS   Memory Limit: 65536K Total Submissions: 43315   Accepted: 14296 Ca ...

  6. [hdu2665]Kth number(划分树求区间第k大)

    解题关键:划分树模板题. #include<cstdio> #include<cstring> #include<algorithm> #include<cs ...

  7. Super Mario HDU - 4417 (主席树询问区间比k小的个数)

    Mario is world-famous plumber. His “burly” figure and amazing jumping ability reminded in our memory ...

  8. [poj 2104]主席树+静态区间第k大

    题目链接:http://poj.org/problem?id=2104 主席树入门题目,主席树其实就是可持久化权值线段树,rt[i]维护了前i个数中第i大(小)的数出现次数的信息,通过查询两棵树的差即 ...

  9. HDU3727--Jewel (主席树 静态区间第k大)

    Jewel Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Subm ...

随机推荐

  1. Minimum Cost POJ - 2516 (模板题 spfa最小费用最大流)

    题意: 人回家,一步一块钱,有x个人,y个房子,求能回家的最大人数且使之费用最小 解析: 就是....套模板,,,, 建图(⊙﹏⊙)...要仔细观察呐 对于人拆不拆都可以  都能过,,,,这里贴上拆开 ...

  2. instanceof判断的对象可以是接口

    instanceof是Java的一个二元操作符(运算符) 用法 boolean result = object instanceof class instanceof通过返回一个布尔值来指出,这个对象 ...

  3. 【BZOJ3309】DZY Loves Math(莫比乌斯反演)

    [BZOJ3309]DZY Loves Math(莫比乌斯反演) 题面 求 \[\sum_{i=1}^a\sum_{j=1}^bf(gcd(a,b))\] 其中,\(f(x)\)表示\(x\)分解质因 ...

  4. 离线安装.NET 3.5

    最近为系统新增一个功能,写完以后进行部署,发现在IIS7上部署没有问题,但是IIS6上部署会出现未知情况,具体表现为取不到数据,估计是IIS6和IIS7直接的差异导致程序异常退出. 为了重现异常,在本 ...

  5. CF710F String Set Queries

    CF710F String Set Queries 支持字符串的插入和删除...SAM也干不了这个事 所以可以用cdq分治+AC自动机O(nlogn)解决 但是本题强制在线~~~ 我们还有一个工具,叫 ...

  6. bzoj3209 花神的数论题——数位dp

    题目大意: 花神的题目是这样的 设 sum(i) 表示 i 的二进制表示中 1 的个数.给出一个正整数 N ,花神要问你 派(Sum(i)),也就是 sum(1)—sum(N) 的乘积. 要对1000 ...

  7. Java: 在不同windows主题下,JFrame窗口设置最佳高度的解决方案

    //设置窗口的大小,无论使用怎样的windows主题,都能灵活的应对,显示合适的窗口大小,一定要在JFrame.setVisible(true)之前调用, //替代传统的frame.setSize(w ...

  8. Java:读取系统信息

    com.sun.management.OperatingSystemMXBean mxbean = (com.sun.management.OperatingSystemMXBean) Managem ...

  9. linux 一些命令(2)

    1.查看centos版本 # lsb_release -a 2.查找大于1000M的文件 find / -type f -size +1000M -print0 | xargs -0 du –h

  10. wagger的展示路径修改

    转:https://www.jianshu.com/p/ce7e247515f5?utm_source=oschina-app 注:本文是基于springboot配置实现,但在实际中使用springm ...