[poj 2104 K-th Number] 主席树 区间第K大
来源:互联网 发布:阿里云的作用 编辑:程序博客网 时间:2024/05/19 23:53
[poj 2104 K-th Number] 主席树 区间第K大
题目链接:[poj 2104 K-th Number]
题意描述:给定
相似题目: [hdu 4417 Super Mario] 主席树+离散化
解题思路:首先对数据离散化。然后线段树记录区间中的数字出现的次数。主席树保存
#include <map>#include <set>#include <queue>#include <cmath>#include <cstdio>#include <string>#include <cstring>#include <iostream>#include <algorithm>using namespace std;//#pragma comment(linker, "/STACK:1024000000,1024000000")#define FIN freopen("input.txt","r",stdin)#define FOUT freopen("output.txt","w",stdout)#define fst first#define snd second#define __mid__ int mid = ((l + r) >> 1)typedef __int64 LL;typedef unsigned __int64 ULL;typedef pair<int, int> PII;const int MAXN = 100000 + 5;const int MAXM = 5000 + 5;const int INF = 0x3f3f3f3f;int N, M, A[MAXN], F[MAXN], L, R, K;int root[MAXN], FSZ, TSZ;struct TNode { int ls, rs, sum;} node[MAXN * 20];void hash_init() { sort(F, F + N); FSZ = unique(F, F + N) - F; F[FSZ ++] = INF;}int getID(const int& x) { return lower_bound(F, F + FSZ, x) - F + 1;}int build(int l, int r) { int rt = TSZ ++; node[rt].sum = 0; if(l == r) { node[rt].ls = node[rt].rs = -1; return rt;} __mid__; node[rt].ls = build(l, mid); node[rt].rs = build(mid + 1, r); return rt;}int update(const int& pos, int r1, int l, int r) { int r2 = TSZ ++; node[r2] = node[r1]; node[r2].sum ++; if(l == r) return r2; __mid__; if(pos <= mid) node[r2].ls = update(pos, node[r1].ls, l, mid); else node[r2].rs = update(pos, node[r1].rs, mid + 1, r); return r2;}int query(int k, int r1, int r2, int l, int r) { if(l == r) return l; __mid__; int x = node[node[r2].ls].sum - node[node[r1].ls].sum; if(k <= x) return query(k, node[r1].ls, node[r2].ls, l, mid); else return query(k - x, node[r1].rs, node[r2].rs, mid + 1, r);}int main() {#ifndef ONLINE_JUDGE FIN;#endif // ONLINE_JUDGE while(~scanf("%d %d", &N, &M)) { for(int i = 0; i < N; i++) scanf("%d", &A[i]), F[i] = A[i]; hash_init(); TSZ = 0; root[0] = build(1, FSZ); for(int i = 0; i < N; i++) { root[i + 1] = update(getID(A[i]), root[i], 1, FSZ); } while(M --) { scanf("%d %d %d", &L, &R, &K); int ret = query(K, root[L - 1], root[R], 1, FSZ) - 1; printf("%d\n", F[ret]); } } return 0;}
0 0
- POJ 2104(K-th Number-区间第k大-主席树)
- POJ 2104(K-th Number-区间第k大-主席树)
- POJ 2104 K-th Number 主席树 静态区间第K大
- 【POJ 2104】(K-th Number-区间第k大-主席树)
- POJ 2104 K-th Number (主席树 静态区间第K大)
- poj 2104 K-th Number (静态区间第k大,主席树)
- [poj 2104 K-th Number] 主席树 区间第K大
- POJ 2104 K-th Number 静态区间第k大 主席树
- POJ 2104 K-th Number 主席树(求区间第k大)
- 【主席树 求区间第k大】poj 2104 K-th Number
- POJ-2104 K-th Number (主席树 不带修改区间第k大)
- poj 2107 K-th Number(主席树求区间第K大)
- POJ 2104 & HDU 2665 & POJ 2761 K-th Number (主席树入门题 区间第K大)
- poj2104 K-th Number(静态区间k大,主席树)
- POJ2104-K-th Number-区间第k大-可持久化线段树/主席树
- POJ-2104 K-th Number(线段树[归并树]-区间第k大)
- POJ 2104 K-th Number 区间第K大,可持久化线段树
- 用线段树求区间第K大(POJ 2104 K-th Number)
- 学习之道二— 十年大牛 三段分解提炼
- Mac中显示隐藏文件
- Android6.0运行时权限处理-超简单封装
- sublimeText 解决中文乱码插件
- STL学习2——序列容器
- [poj 2104 K-th Number] 主席树 区间第K大
- ffmpeg 2.3版本, 关于ffplay音视频同步的分析
- log4j2.7整合到web3.0 (spring4.3.3)
- qt环境搭建
- HTML中表格和表单的基础写法
- python 数字的四舍五入的问题
- Android一个好用的更新库
- 使用雨过天晴还原软件实现系统还原
- AsyncTask介绍