主席树模板题
来源:互联网 发布:九次方大数据借壳上市 编辑:程序博客网 时间:2024/04/29 21:16
记录一个菜逼的成长。。
POJ2104
POJ2761
HDU2665
题意都是区间求第k小
主席树插入是按数组序列从小到大后排名的插入。
所以之后查询才可以按左右子树的个数递归查询
我就记下模板。
#include <cstdio>#include <iostream>#include <algorithm>using namespace std;const int maxn = 100000 + 10;struct Node{ int l,r,sum;}T[maxn*20];int T_cnt;void Insert(int &Rank,int &t,int l,int r){ T[T_cnt++] = T[t];t = T_cnt - 1; ++T[t].sum; if(l == r)return ; int mid = (l + r) >> 1; if(Rank <= mid)Insert(Rank,T[t].l,l,mid); else Insert(Rank,T[t].r,mid+1,r);}int query(int i,int j,int k,int l,int r){ if(l == r)return l; int num = T[T[j].l].sum - T[T[i].l].sum; int mid = (l + r) >> 1; if(k <= num)query(T[i].l,T[j].l,k,l,mid); else query(T[i].r,T[j].r,k-num,mid+1,r);}struct A{ int x,id; bool operator<(const A &t) const{ return x < t.x; }}a[maxn];int Rank[maxn],root[maxn];int n,m;int main(){ T[0].l = T[0].r = T[0].sum = 0; root[0] = 0; while(~scanf("%d%d",&n,&m)){ for( int i = 1; i <= n; i++ ) scanf("%d",&a[i].x),a[i].id = i; sort(a+1,a+1+n); for( int i = 1; i <= n; i++ )Rank[a[i].id] = i; T_cnt = 1; for( int i = 1; i <= n; i++ ){ root[i] = root[i-1]; Insert(Rank[i],root[i],1,n); } while(m--){ int i,j,k; scanf("%d%d%d",&i,&j,&k); printf("%d\n",a[query(root[i-1],root[j],k,1,n)].x); } } return 0;}
0 0
- 主席树模板题
- 【主席树模板】题
- hdu2665 主席树模板题
- [POJ2104] 主席树模板题
- 主席树模板题-poj2104
- 主席树模板总结及题集
- 主席树模板
- 模板_主席树
- 主席树模板poj2104
- 主席树模板
- 主席树模板
- Luogu-3834 (主席树模板)
- 主席树区间修改模板
- 【模板主席树】洛谷p3834
- POJ 2104 K-th Number 主席树模板题
- HDU 2665 Kth number 主席树模板题
- 【CQOI2015】任务查询系统 主席树模板题
- [Hdu] 4417 Super Mario (主席树模板题)
- Chrome 插件集锦😂
- 深入理解java虚拟机(三)----类文件结构
- Mybatis报There is no getter for property named 'name' in 'class java.lang.String'错误
- [BZOJ3907]网格(卡特兰数+组合数学+高精度)
- css3 2d转换3d转换以及动画的知识点汇总
- 主席树模板题
- SharedSDK(三):sharedSdk集成分享及第三方登陆(下载文档Sdk)
- 博客迁移至http://blog.rookiehacker.org
- 从算法上解读自动驾驶是如何实现的?
- Gym 101234A Just question (NO answer!!!)
- 神的主权与人的自由 (李建安)
- N皇后
- CSS3阴影 box-shadow的使用和技巧总结
- 冒泡排序法笔记