[poj 2104] K-th Number【主席树】
传送门: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【主席树】的更多相关文章
- 【POJ 2104】 K-th Number 主席树模板题
达神主席树讲解传送门:http://blog.csdn.net/dad3zz/article/details/50638026 2016-02-23:真的是模板题诶,主席树模板水过.今天新校网不好,没 ...
- 静态区间第k大(主席树)
POJ 2104为例(主席树入门题) 思想: 可持久化线段树,也叫作函数式线段树,也叫主席树(高大上). 可持久化数据结构(Persistent data structure):利用函数式编程的思想使 ...
- poj 2104 K-th Number 主席树+超级详细解释
poj 2104 K-th Number 主席树+超级详细解释 传送门:K-th Number 题目大意:给出一段数列,让你求[L,R]区间内第几大的数字! 在这里先介绍一下主席树! 如果想了解什么是 ...
- poj2104 k-th number 主席树入门讲解
poj2104 k-th number 主席树入门讲解 定义:主席树是一种可持久化的线段树 又叫函数式线段树 刚开始学是不是觉得很蒙逼啊 其实我也是 主席树说简单了 就是 保留你每一步操作完成之后 ...
- POJ 2104 K-th Number 主席树(区间第k大)
题目链接: http://poj.org/problem?id=2104 K-th Number Time Limit: 20000MSMemory Limit: 65536K 问题描述 You ar ...
- POJ 2104:K-th Number(主席树静态区间k大)
题目大意:对于一个序列,每次询问区间[l,r]的第k大树. 分析: 主席树模板题 program kthtree; type point=record l,r,s:longint; end; var ...
- POJ 2104 K-th Number ( 求取区间 K 大值 || 主席树 || 离线线段树)
题意 : 给出一个含有 N 个数的序列,然后有 M 次问询,每次问询包含 ( L, R, K ) 要求你给出 L 到 R 这个区间的第 K 大是几 分析 : 求取区间 K 大值是个经典的问题,可以使用 ...
- SPOJ MKTHNUM & POJ 2104 - K-th Number - [主席树模板题]
题目链接:http://poj.org/problem?id=2104 Description You are working for Macrohard company in data struct ...
- poj 2104 K-th Number(主席树 视频)
K-th Number 题意: 给你一些数,让你求一个区间内,第k大的数是多少. 题解: 主席树第一题,看的qsc视频写的,戳戳戳 学到了unique函数,他的作用是:把相邻的重复的放到后面,返回值是 ...
- Poj 2104 K-th Number(主席树&&整体二分)
K-th Number Time Limit: 20000MS Memory Limit: 65536K Case Time Limit: 2000MS Description You are wor ...
随机推荐
- awk实现求和、平均、最大值和最小值的计算操作
0.准备和数据文件 比如有一个数据文件,只有一列(在之前可以通过各种手段过滤出只有数字这一列),比如操作的响应时间 Txt代码 490898 1189235 20212 1494270 14 ...
- codeforces 665A A. Buses Between Cities(水题)
题目链接: A. Buses Between Cities time limit per test 1 second memory limit per test 256 megabytes input ...
- C语言文件读写总结
主要有四种: 1.文件的字符输入输出函数 fgetc fputc2.文件的字符串输入输出函数 fgets fputs3.文件的格式化输入输出函数 fscanf fprintf4.文件的数据块输入输出函 ...
- AOP原理
AOP(面向切面编程):扩展功能时不修改源代码,采用横向抽取机制 纵向抽取机制: 横向抽取机制: 第一种情况: 第二种情况:
- Eclipse补全功能
默认当输入 . 时会弹出提示补全, 如何设置 eclipse 代码自动补全,参考 http://jingyan.baidu.com/article/d45ad148b214a969552b8001.h ...
- androidEditTextinputType及android:imeOptions=”actionDone”(转)
一.android 软件盘事件响应 在android中,有时需要对EditText实现软件盘监听的场景.当android按下软键盘的时候,响应完成.发送.搜索或者其他事件. Google 提供了 Ed ...
- 1.11-1.12 Sqoop导入数据时两种增量方式导入及direct
一.增量数据的导入 1.两种方式 ## query 有一个唯一标识符,通常这个表都有一个字段,类似于插入时间createtime where createtime => 201509240000 ...
- python模块datetime
1. 日期输出格式化 datetime => string import datetime now = datetime.datetime.now() now.strftime('%Y-%m-% ...
- Laravel中的模板引擎Blade
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- python3 封装之property 多态 绑定方法classmethod 与 非绑定方法 staticmethod
property 特性 什么是特性property property 是一种特殊的属性,访问它时会执行一段功能(函数),然后返回值 例如 BMI指数(bmi是计算而来的,但很明显它听起来像是一个属性而 ...