传送门:http://poj.org/problem?id=2104

保存模版。

#include <cstdio>
#include <algorithm>
#include <cstring> // Sora Sai Gou!!! const int maxn = 100005, maxm = 5005, maxv = 2000005, nil = maxv - 1; int n, m, a[maxn], b[maxn], siz[maxv], ch[maxv][2], root[maxv], cnt;
int t1, t2, t3; inline int fndidx(int key) {
int left = 1, right = n, mid;
while (left < right) {
mid = (left + right) >> 1;
if (a[mid] < key) {
left = mid + 1;
}
else {
right = mid;
}
}
return left;
}
void ist(int & ima, int p, int key, int ql, int qr) {
if (!ima) {
ima = ++cnt;
}
siz[ima] = siz[p] + 1;
if (ql == qr) {
return;
}
int mid = (ql + qr) >> 1;
if (key <= mid) {
ch[ima][1] = ch[p][1];
ist(ch[ima][0], ch[p][0], key, ql, mid);
}
else {
ch[ima][0] = ch[p][0];
ist(ch[ima][1], ch[p][1], key, mid + 1, qr);
}
}
inline int qry (int l, int r, int kth) {
--l;
int left = 1, right = n, mid, p1 = root[l], p2 = root[r], tem;
while (left < right) {
tem = siz[ch[p2][0]] - siz[ch[p1][0]];
mid = (left + right) >> 1;
if (kth <= tem) {
p2 = ch[p2][0];
p1 = ch[p1][0];
right = mid;
}
else {
kth -= tem;
p2 = ch[p2][1];
p1 = ch[p1][1];
left = mid + 1;
}
}
return a[left];
} int main(void) {
//freopen("in.txt", "r", stdin);
scanf("%d%d", &n, &m);
for (int i = 1; i <= n; ++i) {
scanf("%d", a + i);
}
memcpy(b, a, sizeof b);
std::sort(a + 1, a + n + 1);
for (int i = 1; i <= n; ++i) {
b[i] = fndidx(b[i]);
} for (int i = 1; i <= n; ++i) {
ist(root[i], root[i - 1], b[i], 1, n);
}
for (int i = 0; i < m; ++i) {
scanf("%d%d%d", &t1, &t2, &t3);
printf("%d\n", qry(t1, t2, t3));
}
return 0;
}

  

[poj 2104] K-th Number【主席树】的更多相关文章

  1. 【POJ 2104】 K-th Number 主席树模板题

    达神主席树讲解传送门:http://blog.csdn.net/dad3zz/article/details/50638026 2016-02-23:真的是模板题诶,主席树模板水过.今天新校网不好,没 ...

  2. 静态区间第k大(主席树)

    POJ 2104为例(主席树入门题) 思想: 可持久化线段树,也叫作函数式线段树,也叫主席树(高大上). 可持久化数据结构(Persistent data structure):利用函数式编程的思想使 ...

  3. poj 2104 K-th Number 主席树+超级详细解释

    poj 2104 K-th Number 主席树+超级详细解释 传送门:K-th Number 题目大意:给出一段数列,让你求[L,R]区间内第几大的数字! 在这里先介绍一下主席树! 如果想了解什么是 ...

  4. poj2104 k-th number 主席树入门讲解

    poj2104 k-th number 主席树入门讲解 定义:主席树是一种可持久化的线段树 又叫函数式线段树   刚开始学是不是觉得很蒙逼啊 其实我也是 主席树说简单了 就是 保留你每一步操作完成之后 ...

  5. POJ 2104 K-th Number 主席树(区间第k大)

    题目链接: http://poj.org/problem?id=2104 K-th Number Time Limit: 20000MSMemory Limit: 65536K 问题描述 You ar ...

  6. POJ 2104:K-th Number(主席树静态区间k大)

    题目大意:对于一个序列,每次询问区间[l,r]的第k大树. 分析: 主席树模板题 program kthtree; type point=record l,r,s:longint; end; var ...

  7. POJ 2104 K-th Number ( 求取区间 K 大值 || 主席树 || 离线线段树)

    题意 : 给出一个含有 N 个数的序列,然后有 M 次问询,每次问询包含 ( L, R, K ) 要求你给出 L 到 R 这个区间的第 K 大是几 分析 : 求取区间 K 大值是个经典的问题,可以使用 ...

  8. SPOJ MKTHNUM & POJ 2104 - K-th Number - [主席树模板题]

    题目链接:http://poj.org/problem?id=2104 Description You are working for Macrohard company in data struct ...

  9. poj 2104 K-th Number(主席树 视频)

    K-th Number 题意: 给你一些数,让你求一个区间内,第k大的数是多少. 题解: 主席树第一题,看的qsc视频写的,戳戳戳 学到了unique函数,他的作用是:把相邻的重复的放到后面,返回值是 ...

  10. Poj 2104 K-th Number(主席树&&整体二分)

    K-th Number Time Limit: 20000MS Memory Limit: 65536K Case Time Limit: 2000MS Description You are wor ...

随机推荐

  1. Backbone vs AngularJS

    首先 Backbone 没有 AngularJS 那么容易上手. 而且作者并没有想让Backbone草根化的意思. Backbone 比喻成战斗机. 看上去更像是真正的MVC框架, model-vie ...

  2. PICT实现组合测试用例

    成功安装后,在命令行中输入命令pict: 可以看到pict命令的一些选项: /o:N   组合数,默认值为2,即pict生成的测试用例集中每条测试数据会有两个值与其他测试集是不同的: /d:C   值 ...

  3. html5 canvas 涂鸦画板

    html5 canvas 的涂鸦画板,可以加载图片进行涂鸦,也可以下载服务器使用的php上传的图片不能超过1M,只能是jpg或者png 格式的演示地址的服务器网速不怎么样,读取文件可能很慢,到达100 ...

  4. suishou

    sageException: Write operations are not allowed in read-only mode (FlushMode.NEVER/MANUAL): Turn you ...

  5. [Tyvj Aug11] 黄金矿工

    传送门 Description 黄金矿工是一个经典的小游戏,它可以锻炼人的反应能力.该游戏中,可以通过“挖矿”获得积分并不断升级.玩家可以在线玩flash版黄金矿工,也可以下载后玩单机版黄金矿工.目前 ...

  6. 未知USB设备 端口重置失败

    1.开启手机中USB调试 进入“设置”->“应用程序”->“开发”勾选“USB调试程序”.这样设备才可以通过USB连线时被PC识别到. 2.安装驱动 要将Android手机连接到PC需要安 ...

  7. 多线程辅助类-CountDownLatch的用法

    转自:http://www.iteye.com/topic/1002652 CountDownLatch,一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待. 主要方 ...

  8. luogu 3389 【模板】高斯消元

    大概就是对每一行先找到最大的减小误差,然后代入消元 #include<iostream> #include<cstdio> #include<cstring> #i ...

  9. javascript之创建对象的方式

    1.object构造函数创建 var obj=new Object(); obj.name='xue'; 2.对象字面量创建 var obj={ name:'xue' } 3.构造函数创建 funct ...

  10. C++之static类成员,static类成员函数

    0.static修饰类中成员,表示类的共享数据 1.static类成员 在C++primer里面说过,static类成员不像普通的类数据成员,static类数据成员独立于一切类对象处在.static类 ...