主席树模版
来源:互联网 发布:淘宝店铺首页海报代码 编辑:程序博客网 时间:2024/06/08 11:44
主席树模版
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int maxn = 100010;int ls[maxn*20], rs[maxn*20], sum[maxn*20];int T[maxn], tot;void build(int l, int r, int& rt){rt = ++tot;sum[rt] = 0;if(l == r)return;int m = l+r>>1;build(l, m, ls[rt]);build(m+1, r, rs[rt]);}void update(int last, int p, int l, int r, int& rt){rt = ++tot;ls[rt] = ls[last];rs[rt] = rs[last];sum[rt] = sum[last]+1;if(l == r)return;int m = l+r>>1;if(p <= m)update(ls[last], p, l, m, ls[rt]);elseupdate(rs[last], p, m+1, r, rs[rt]);}int query(int x, int y, int l, int r, int k){if(l == r)return l;int m = l+r>>1;int cnt = sum[ls[y]]-sum[ls[x]];if(k <= cnt)return query(ls[x], ls[y], l, m, k);elsereturn query(rs[x], rs[y], m+1, r, k-cnt);}int num[maxn], a[maxn], n, q;void cal(){for(int i = 1; i <= n; i++){scanf("%d", &a[i]);num[i] = a[i];}tot = 0;sort(num+1, num+n+1);int cnt = unique(num+1, num+n+1)-(num+1);build(1, cnt, T[0]);for(int i = 1; i <= n; i++){a[i] = lower_bound(num+1, num+cnt+1, a[i])-num;}for(int i = 1; i <= n; i++)update(T[i-1], a[i], 1, cnt, T[i]);while(q--){int x, y, k;scanf("%d %d %d", &x, &y, &k);printf("%d\n", num[query(T[x-1], T[y], 1, cnt, k)]);}}int main(){int T;scanf("%d", &T);while(T--){scanf("%d %d", &n, &q);cal();}return 0;}
0 0
- 主席树模版
- 主席树模版
- hdoj 2665 主席树模版
- poj2104 K-th number 主席树模版
- POJ 2104&2761 主席树模版
- 主席树模版 记录历史操作
- 省选模版复习——主席树
- poj 2104 -- K-th Number (主席树模版题)
- 主席、树、主席树!
- 主席树
- 主席树
- 主席树
- 主席树
- 主席树
- 主席树
- 主席树
- 主席树
- 主席树
- 别犯这些错,否则越跳越糟心!
- POI使用SAX处理大量数据的xlsx格式的Excel文件
- php文件上传
- MTK功能机按键的上拉电阻导致了extended key模式不正常?
- Win7 64位安装Numpy
- 主席树模版
- java实现的一个发送手机短信
- knn最近邻
- 生产者和消费者
- jilu
- Excel Sheet Column Number
- 使用Python进行无线攻击--Dnspwn攻击
- pat----连续因子
- Gradle之使用BuildConfig自定义常量