Code:

#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn = 20000000 + 4;
int n,m, sumv[maxn], node_cnt, root[maxn], A[maxn], arr[maxn];
struct Segment_Tree
{
int ls[maxn], rs[maxn];
void build(int l, int r, int &o)
{
if(l > r) return ;
o = ++node_cnt;
if(l == r) return ;
int mid = (l + r) >> 1;
build(l, mid, ls[o]);
build(mid + 1, r, rs[o]);
}
int update(int l, int r, int k, int o)
{
int oo = ++node_cnt;
sumv[oo] = sumv[o] + 1;
ls[oo] = ls[o];
rs[oo] = rs[o];
if(l == r) return oo;
int mid = (l + r) >> 1;
if(k <= mid) ls[oo] = update(l, mid, k, ls[o]);
else rs[oo] = update(mid + 1, r, k, rs[o]);
return oo;
}
int query(int u,int v, int l, int r,int k){
if(l == r) return l;
int mid = (l + r) >> 1;
int delta = sumv[ls[v]] - sumv[ls[u]];
if(delta >= k) return query(ls[u], ls[v], l, mid, k);
else return query(rs[u], rs[v], mid + 1, r, k - delta);
}
}T;
int main()
{
scanf("%d%d",&n,&m);
for(int i = 1;i <= n; ++i)
{
scanf("%d",&A[i]);
arr[i] = A[i];
}
sort(arr + 1, arr + 1 + n);
T.build(1, n, root[0]);
for(int i = 1;i <= n; ++i)
{
int cur = lower_bound(arr + 1, arr + 1 + n, A[i]) - arr;
root[i] = T.update(1, n, cur, root[i - 1]);
}
for(int i = 1;i <= m; ++i)
{
int l, r, k;
scanf("%d%d%d",&l,&r,&k);
int pos = T.query(root[l - 1],root[r], 1, n, k);
printf("%d\n", arr[pos]);
}
return 0;
}

  

最新文章

  1. j2ee log4j集中式日志解决方案logpool-v0.2
  2. 转 : Hibernate懒加载深入分析
  3. C++ --- Hellowrod
  4. Android RadioGroup 及资源文件 &amp; selector
  5. NSValue
  6. chrome调试学习
  7. BZOJ 3160 万径人踪灭 解题报告
  8. 【转】opencv检测运动物体的基础_特征提取
  9. 432B - Football Kit
  10. spring-AOP-基于Schema切面的小例子
  11. html5 01 随记
  12. vue的一些注意点
  13. 4.1、实现4个LED灯同时闪烁
  14. cei()、linspace()、arrange()、full()、eye()、empty()、random()
  15. Android开发工程师文集-Android知识点讲解
  16. JAVA消息确认机制之ACK模式
  17. 条件随机场之CRF++源码详解-特征
  18. loader 的理解
  19. SharePoint自定义程序页面部署 不用重启IIS
  20. 华为手机nova2s使用第三方字体库

热门文章

  1. Android设计模式—— 观察者模式(以及EventBus的简单使用)
  2. WebApi笔记
  3. 学习ZBrush到底需不需要用数位板?
  4. BZOJ4545: DQS的trie 广义后缀自动机_LCT
  5. 并发编程——全局解释器锁GIL
  6. oracle中nvl函数用法
  7. BZOJ 2260 商店购物(最小树形图)
  8. 2.安装Cython
  9. oracle 的交并差函数,intersect;union;minus。
  10. JavaScript中的常用的数组操作方法