题解:

裸的主席树,记录最小值

代码:

  1. #include<cstdio>
  2. #include<cmath>
  3. #include<algorithm>
  4. #include<cstring>
  5. using namespace std;
  6. const int N=;
  7. int a[N],cnt,Case,rt[N],b[N],now,n,m,x,y,k;
  8. struct Tree
  9. {
  10. int ls,rs,num;
  11. }T[N*];
  12. int ef(int x)
  13. {
  14. int l=,r=cnt;
  15. while (l<r)
  16. {
  17. int mid=(l+r)/;
  18. if (b[mid]<x)l=mid+;
  19. else r=mid;
  20. }
  21. return l;
  22. }
  23. int build(int l,int r)
  24. {
  25. now++;
  26. if (l==r)return now;
  27. int k=now,mid=(l+r)/;
  28. if (l<=mid)T[k].ls=build(l,mid);
  29. if (mid<r)T[k].rs=build(mid+,r);
  30. return k;
  31. }
  32. int insert(int x,int l,int r,int s)
  33. {
  34. now++;
  35. if (l==r)
  36. {
  37. T[now].num=T[x].num+;
  38. return now;
  39. }
  40. int k=now,mid=(l+r)/;
  41. if (s<=mid)
  42. {
  43. T[k].ls=insert(T[x].ls,l,mid,s);
  44. T[k].rs=T[x].rs;
  45. }
  46. else
  47. {
  48. T[k].ls=T[x].ls;
  49. T[k].rs=insert(T[x].rs,mid+,r,s);
  50. }
  51. T[k].num=T[T[k].ls].num+T[T[k].rs].num;
  52. return k;
  53. }
  54. int find(int x,int y,int z,int l,int r)
  55. {
  56. if (l==r)return l;
  57. if (T[T[x].ls].num-T[T[y].ls].num>=z)
  58. return find(T[x].ls,T[y].ls,z,l,(l+r)/);
  59. return find(T[x].rs,T[y].rs,z-
  60. T[T[x].ls].num+T[T[y].ls].num,(l+r)/+,r);
  61. }
  62. int main()
  63. {
  64. scanf("%d",&Case);
  65. while (Case--)
  66. {
  67. memset(T,,sizeof T);
  68. now=;
  69. scanf("%d%d",&n,&m);
  70. for (int i=;i<=n;i++)scanf("%d",&a[i]);
  71. for (int i=;i<=n;i++)b[i]=a[i];
  72. sort(b+,b+n+);
  73. cnt=;
  74. for (int i=;i<=n;i++)
  75. if (b[i]!=b[i-])b[++cnt]=b[i];
  76. for (int i=;i<=n;i++)a[i]=ef(a[i]);
  77. rt[]=build(,n);
  78. for (int i=;i<=n;i++)rt[i]=insert(rt[i-],,n,a[i]);
  79. while (m--)
  80. {
  81. scanf("%d%d%d",&x,&y,&k);
  82. printf("%d\n",b[find(rt[y],rt[x-],k,,n)]);
  83. }
  84. }
  85. }

hdu2665的更多相关文章

  1. 【POJ2104】【HDU2665】K-th Number 主席树

    [POJ2104][HDU2665]K-th Number Description You are working for Macrohard company in data structures d ...

  2. hdu2665(主席树模板题)

    hdu2665 题意 求区间第 k 小. 分析 参考 这类题目做法挺多的,例如 划分树. 这里使用主席树再写一发,不得不说主席树相比而言要好写的多,比起普通线段树,主席树就是复用了线段树共有的信息. ...

  3. 初学划分树,小见解之!POJ-2104/HDU-2665

    划分树 本来是学主席树的,可怜我等巨弱观群巨博客难解fotle主席的思想精髓.于是学了一下划分树,嗯,花了一下午时间理解build(其实自己模拟一遍就通了),我很难理解为什么划分树会看不懂而能学会主席 ...

  4. 洛谷3834 hdu2665主席树模板,动态查询区间第k小

    题目链接:https://www.luogu.com.cn/problem/P3834 对于区间查询第k小的问题,在区间数量达到5e5的时候是难以用朴素数据结构实现的,这时候主席树就应运而生了,主席树 ...

  5. hdu2665 && poj2104划分树

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

  6. POJ2104&&HDU2665(静态区间第K小)

    题目大意 给定一个有N个数字的序列,然后又m个查询,形式如下: l r k 要求你返回区间[l,r]第k小的数是哪个 题解 终于弄懂主席树是个啥东西了,O(∩_∩)O~~,这题正是主席树的裸题,主席树 ...

  7. 主席树初步 HDU2665的区间第k小

    首先看一下这个人的blog吧,讲的精炼http://blog.sina.com.cn/s/blog_4a0c4e5d0101c8fr.html 然后再推荐一下这个人的blog:http://www.c ...

  8. [POJ2104/HDU2665]Kth Number-主席树-可持久化线段树

    Problem Kth Number Solution 裸的主席树,模板题.但是求k大的时候需要非常注意,很多容易写错的地方.卡了好久.写到最后还给我来个卡空间. 具体做法参见主席树论文<可持久 ...

  9. HDU2665 求区间第K大 主席树

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=2665 代码: //#include<bits/stdc++.h> #include< ...

  10. 主席树学习笔记-hdu-2665

    主席树就是对每个历史版本都建了一颗线段树,这样我们在统计一些问题的时候,对于一个区间[L,R]的询问,就可以利用前缀和的思想找到第L-1和第R颗历史版本的线段树来处理查找.由于这样空间需求就增大了,注 ...

随机推荐

  1. C# 获取枚举的描述属性

    在使用枚举类型时,我们需要取名称和值,甚至有时候还需要取枚举类型的描述.通过反射,我们能获取到枚举类型的描述属性. 首先我们需要给枚举类型添加描述属性(属性都没有是不可能取到的),[Descripti ...

  2. Linux下GCC生成和使用静态库和动态库【转】

    本文转载自:http://www.cppblog.com/deane/articles/165216.html 一.基本概念 1.1什么是库 在windows平台和linux平台下都大量存在着库. 本 ...

  3. 矩阵二分快速幂优化dp动态规划

    矩阵快速幂代码: int n; // 所有矩阵都是 n * n 的矩阵 struct matrix { int a[100][100]; }; matrix matrix_mul(matrix A, ...

  4. # WinForm关闭窗体确认

    private void Lba_IE_Form_FormClosing(object sender, FormClosingEventArgs e) { if (MessageBox.Show(&q ...

  5. shell 脚本中所有循环语法

    写出 shell 脚本中所有循环语法 for 循环 : for i in $(ls);do echo item:$i done while 循环 : #!/bin/bash COUNTER=0 whi ...

  6. HDU 4489 The King's Ups and Downs

    HDU 4489 The King's Ups and Downs 思路: 状态:dp[i]表示i个数的方案数. 转移方程:dp[n]=∑dp[j-1]/2*dp[n-j]/2*C(n-1,j-1). ...

  7. Codeforces 559B - Equivalent Strings

    559B - Equivalent Strings 思路:字符串处理,分治 不要用substr(),会超时 AC代码: #include<bits/stdc++.h> #include&l ...

  8. Vue项目骨架屏注入实践

    相比于早些年前后端代码紧密耦合.后端工程师还得写前端代码的时代,如今已发展到前后端分离,这种开发方式大大提升了前后端项目的可维护性与开发效率,让前后端工程师关注于自己的主业.然而在带来便利的同时,也带 ...

  9. openshift harp.js heroku react-router 4

    https://segmentfault.com/a/1190000000355181 http://harpjs.com/ https://www.jianshu.com/p/7bc34e56fa3 ...

  10. Android 使用SQLite

    SQLite简介 Google为Andriod的较大的数据处理提供了SQLite,他在数据存储.管理.维护等各方面都相当出色,功能也非常的强大.SQLite具备下列特点: 1.轻量级 使用 SQLit ...