poj2104 区间第K大
来源:互联网 发布:淘宝买家数据出售 qq 编辑:程序博客网 时间:2024/04/30 10:51
题目链接:http://poj.org/problem?id=2104
题意:给你一串数让你求区间第k大。
分析:主席树模板题, 详细解释看这儿:主席树介绍
#include <cstdio>#include <cstring>#include <algorithm>#include <iostream>using namespace std;const int maxn = 100000 + 100;int n, m; //n个数字 m次查询int L[maxn<<6], R[maxn<<6], sum[maxn<<6];int tot;int a[maxn], T[maxn], Hash[maxn];int build(int l, int r) { //建一个空树 int rt = ++tot; sum[rt] = 0; if(l < r) { int m = (l+r)/2; L[rt] = build(l, m); R[rt] = build(m+1, r); } return rt;}int update(int pre, int l, int r, int x) { int rt = ++tot; L[rt] = L[pre]; R[rt] = R[pre]; sum[rt] = sum[pre] + 1; if(l < r) { int m = (l + r) / 2; if(x <= m) //去左子树 L[rt] = update(L[pre], l, m, x); else R[rt] = update(R[pre], m+1, r, x); } return rt;}int query(int u, int v, int l, int r, int k) { if(l >= r) return l; int m = (l+r)/2; int num = sum[L[v]] - sum[L[u]]; if(num >= k) return query(L[u], L[v], l, m, k); else return query(R[u], R[v], m+1, r, k-num);}int main() { scanf("%d%d", &n, &m); for(int i=1; i<=n; i++) { scanf("%d", &a[i]); Hash[i] = a[i]; } sort(Hash+1, Hash+1+n); int d = unique(Hash+1, Hash+1+n) - Hash - 1; tot = 0; T[0] = build(1, d); //建一个空树 for(int i=1; i<=n; i++) { int x = lower_bound(Hash+1, Hash+1+d, a[i]) - Hash; T[i] = update(T[i-1], 1, d, x); } while(m--) { int l, r, k; scanf("%d%d%d", &l, &r, &k); int x = query(T[l-1], T[r], 1, d, k); printf("%d\n", Hash[x]); } return 0;}//7 3//1 5 2 6 3 7 4//2 5 3//4 4 1//1 7 3//5//6//3
0 0
- poj2104 区间第K大
- poj2104(区间第k大+离散化)
- POJ2104 ---(区间第K 大)
- poj2104 主席树区间第k大
- POJ2104 区间第k大(版本1)
- 【poj2104】区间第k大(版本1)
- poj2104 (线段树求区间第k大)
- poj2761&&poj2104 主席树(静态区间第K大)
- POJ2104 POJ2761 区间第K大 主席树
- 区间第k大(版本1)POJ2104(BSOI1722)
- poj2104区间K大 主席树
- POJ2104-K-th Number-区间第k大-可持久化线段树/主席树
- 【poj2104】不带修改的区间第k大 主席树
- 查询区间第k大 POJ2104 暴力 or 划分树 or 归并树
- 可持久化线段树(主席树)(图文并茂详解)【poj2104】【区间第k大】
- poj2104 K-th Number(静态区间k大,主席树)
- 主席树经典题目 区间k大值 poj2104
- 区间第K大
- MySQL事物隔离级别详解 【转】
- 初识AngularJs(2)
- 仿微信-界面动画(3)-摇一摇
- java中final关键字作用
- Java学习路线图,专为新手定制的Java学习计划建议
- poj2104 区间第K大
- UVA 10118 Free Candies
- hdu5861 维护最大最小值线段树
- XMPP协议实现原理介绍
- 关于git、github和.gitignore的一些事
- 2016多校训练Contest10: 1007 cjj's string game hdu5863
- 01_进程和线程
- Maven异常:Could not find artifact
- JAVA注解