题目链接

因为这道题没有删除修改之类的,所以很多人会用离散化之后的线段树来做,但是实际上(可能是我懒得去做离散化这个操作了),然后就是直接写可持久化线段树,区间的长度就是int的从最小到最大的长度,然后记录的是size,我们最后直接返回的是对应的位置即可。


 #include <iostream>
#include <cstdio>
#include <cmath>
#include <string>
#include <cstring>
#include <algorithm>
#include <limits>
#include <vector>
#include <stack>
#include <queue>
#include <set>
#include <map>
#define lowbit(x) ( x&(-x) )
#define pi 3.141592653589793
#define e 2.718281828459045
#define INF 0x3f3f3f3f
#define HalF (l + r)>>1
#define lsn rt<<1
#define rsn rt<<1|1
#define Lson lsn, l, mid
#define Rson rsn, mid+1, r
#define QL Lson, ql, qr
#define QR Rson, ql, qr
#define myself rt, l, r
using namespace std;
typedef unsigned long long ull;
typedef long long ll;
const int maxN = 1e5 + , _UP = , _DOWN = -;
int N, M, root[maxN], tot, siz[ * maxN], lc[ * maxN], rc[ * maxN];
inline void insert(int &rt, int old, ll l, ll r, int qx)
{
rt = ++tot;
siz[rt] = siz[old] + ; lc[rt] = lc[old]; rc[rt] = rc[old];
if(l == r) return;
ll mid = HalF;
if(qx <= mid) insert(lc[rt], lc[old], l, mid, qx);
else insert(rc[rt], rc[old], mid + , r, qx);
}
inline ll query(int now, int old, ll l, ll r, int k)
{
if(l == r) return l;
ll mid = HalF;
if(k <= siz[lc[now]] - siz[lc[old]]) return query(lc[now], lc[old], l, mid, k);
else return query(rc[now], rc[old], mid + , r, k - siz[lc[now]] + siz[lc[old]]);
}
inline void init()
{
for(int i=; i<=tot; i++) root[i] = ;
tot = ;
}
int main()
{
while(scanf("%d%d", &N, &M) != EOF)
{
init();
for(int i=, val; i<=N; i++)
{
scanf("%d", &val);
insert(root[i], root[i - ], _DOWN, _UP, val);
}
int l, r, k;
while(M--)
{
scanf("%d%d%d", &l, &r, &k);
printf("%lld\n", query(root[r], root[l-], _DOWN, _UP, k));
}
}
return ;
}

最新文章

  1. DataBase异常状态:Recovery Pending,Suspect,估计Recovery的剩余时间
  2. hibernate单表junit测试
  3. oracle数据库常用SQL语句
  4. Cocos2d-x响应android返回键
  5. 重回博客 谈一谈Node中的异步和单线程
  6. keil5之32环境配置
  7. llinux基本指令
  8. 极速创建 IOS APP !涛舅舅苹果 IOS APP自助生成系统正式上线
  9. sudoers权限管理
  10. 使用npm安装一些包失败了,更换npm源
  11. Python运维开发基础08-文件基础【转】
  12. C++ 获取程序编译时间
  13. db2 活动日志激增的原因分析处理
  14. mac电脑使用,开发环境配置指南
  15. shell脚本-预定义常量
  16. JavaSE 集合补充点(JDK1.9对集合添加的优化)
  17. js里实现给数字加三位一逗号间隔的两种方法
  18. c# 日期函数[string.Format----GetDateTimeFormats]格式
  19. November 19th 2016 Week 47th Saturday
  20. 关于word转化成xml,图片的转换

热门文章

  1. Python中包的定义
  2. Unity3D 优化
  3. the sum of two fixed value
  4. 发现一个好的后台模板 xtreme admin
  5. [转]使用flask实现mock server
  6. linux Sersync 参数说明
  7. jpype测试报错,找不到类raise _RUNTIMEEXCEPTION.PYEXC(&quot;Class %s not found&quot; % name)
  8. JDK自带的线程池详解
  9. phpstorm 调试时浏览器显示The requested resource / was not found on this server
  10. windows 10 删除资源管理器导航栏 Creative Cloud Files