HDOJ2665 &&poj2104 k-th number(主席树+求第K小)
来源:互联网 发布:mac版永恒战士2存档 编辑:程序博客网 时间:2024/05/18 09:04
转自:http://www.cnblogs.com/Empress/p/4652449.html
题意:给n、m
下面有n个数 (编号1到n)
有m个询问,询问的是上面的数的编号在[l,r]之间第k小的数
n、m的范围都是
#include<iostream>#include<cstdio>#include<algorithm>using namespace std;#define lson l, m#define rson m+1, rconst int N = 1e5 + 5;int L[N << 5], R[N << 5], sum[N << 5]; //这个区间内数字的个数int tot; //tot是现在数组开到多大了int a[N], T[N], Hash[N];//Ti表示一棵[1, i]区间的线段树//我们并不需要建一整棵树,我们只需要 单独建立logn个结点,跟Ti−1连起来就好了int build(int l, int r){int rt = (++tot);sum[rt] = 0;if (l<r){int m = (l + r) >> 1;L[rt] = build(lson);R[rt] = build(rson);}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) >> 1;if (x <= m)L[rt] = update(L[pre], lson, x);elseR[rt] = update(R[pre], rson, x);}return rt;}int query(int u, int v, int l, int r, int k){if (l >= r)return l;int m = (l + r) >> 1;int num = sum[L[v]] - sum[L[u]];//[u,v]=[1,v]-[1,u]if (num >= k)return query(L[u], L[v], lson, k);elsereturn query(R[u], R[v], rson, k - num);}//一边做减法 一边查询int main(){tot = 0;int n, m;scanf("%d%d", &n, &m);for (int i = 1; i <= n; i++){scanf("%d", &a[i]);Hash[i] = a[i];}sort(Hash + 1, Hash + n + 1);int d = unique(Hash + 1, Hash + n + 1) - Hash - 1;T[0] = build(1, d);for (int i = 1; i <= n; i++){int x = lower_bound(Hash + 1, Hash + d + 1, 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;}
转自:http://www.cnblogs.com/Empress/p/4652449.html
阅读全文
0 0
- HDOJ2665 &&poj2104 k-th number(主席树+求第K小)
- POJ2104--K-th Number(主席树)
- poj2104 K-th Number(主席树)
- POJ2104 K-th Number(主席树)
- POJ2104 K-th Number (主席树)
- 主席树模板 [poj2104]K-th Number
- kyeremal-poj2104-K-th Number-主席树
- POJ2104 K-th Number【主席树】
- POJ2104 K-th Number 主席树
- poj2104 K-th Number 主席树
- 【poj2104】K-th Number 主席树
- poj2104 K-th number 主席树模版
- 【主席树】POJ2104 K-th Number
- [poj2104]K-th Number 主席树
- POJ2104[K-th Number]--主席树
- POJ2104 K-th Number【主席树】
- HDU2665 POJ2104 K-th Number(主席树)
- poj2104 K-th Number【主席树模板】
- 拉格朗日乘子法(Lagrange Multiplier)和KKT条件
- C语言比较两数大小
- LeetCode15. 3Sum
- HDU 1026 Ignatius and the Princess I
- POJ
- HDOJ2665 &&poj2104 k-th number(主席树+求第K小)
- 【秋招总结】我的数据分析之路已经结束了,或者说,后会有期了
- java配置环境变量教程
- EnumProcessModulesEx return false
- CSS 颜色代码大全
- Codeforces Round #149 (Div. 2) E. XOR on Segment(21棵线段树处理每一位+区间异或)
- 深入理解Java虚拟机之内存详解
- Bomb(HDU 3555 数位DP)
- python爬虫实战笔记---selenium爬取QQ空间说说并存至本地