[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 ...
随机推荐
- ubuntu动态加载模块简单模板
1:简单代码 #include<linux/init.h> #include<linux/module.h> MODULE_LICENSE("GPL"); ...
- Promise 源码分析
前言 then/promise项目是基于Promises/A+标准实现的Promise库,从这个项目当中,我们来看Promise的原理是什么,它是如何做到的,从而更加熟悉Promise 分析 从ind ...
- ImageIO 操作图片
/** * 读取本地图片到另一个本地文件夹 * @throws IOException */ public void copeImageToOtherFolder() throws IOExcepti ...
- extjs grid renderer参数用法
今天在导出EXT的二维时老是报错,追进去看是renderer : function(value)的参数不对,经过一番研究,未免以后遇到再次浪费时间,记录一下. var cm = new Ext.gri ...
- Codeforces Round #373 (Div. 2) C. Efim and Strange Grade —— 贪心 + 字符串处理
题目链接:http://codeforces.com/problemset/problem/719/C C. Efim and Strange Grade time limit per test 1 ...
- java 基于百度地图API GPS经纬度解析地址
首先这是百度地图api 的接口地址,基于接口的参数,不过多介绍,其中都提供相应的介绍: http://lbsyun.baidu.com/index.php?title=webapi/guide/web ...
- 在Angular.js中的H5页面调用Web api时跨域问题处理
/// <summary> /// 被请求时 /// 在Angular.js中的H5页面调用Web api时跨域问题处理 /// </summary> /// <para ...
- JavaWeb之动态页面技术JSP/EL/JSTL
一.JSP技术 1.jsp脚本和注释 jsp脚本: 1)<%java代码%> ----- 内部的java代码翻译到service方法的内部 2)<%=java变量或表达式> - ...
- css td 溢出改为省略号
<style> .table{ table-layout: fixed; width:100%; } .td{ width:100px; white-space: nowrap; over ...
- C++之pair与make_pair
std::pair主要的作用是将两个数据组合成一个数据,两个数据可以是同一类型或者不同类型. 例如std::pair<int,float> 或者 std::pair<double,d ...