博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ1803Spoj1487 Query on a tree III——主席树
阅读量:4701 次
发布时间:2019-06-09

本文共 1558 字,大约阅读时间需要 5 分钟。

题目大意

  给一棵有点权的n个点的有根树,保证任意两点的点权不同,m次询问每次询问x的子树中权值第k大的点。

输入

  先输入n,然后每个点点权,再输入n-1行每行两个数x,y代表x和y相连,再输入m,之后m次询问,每行两个数x,k。

 

  主席树,随便找一个点为根,再dfs出树的dfs序,按dfs序建每一时刻主席树,利用主席树查询x子树区间第k大。

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;inline char _read(){ static char buf[100000],*p1=buf,*p2=buf; return p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++;}inline int read(){ int x=0,f=1;char ch=_read(); while(ch>'9'||ch<'0'){if(ch=='-')f=-1;ch=_read();} while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+ch-'0';ch=_read();} return x*f;}int n,m;int x,y;int tot;int num;int cnt;int q[100010];int s[100010];int t[100010];int v[100010];int to[200010];int ls[4000010];int rs[4000010];int next[200010];int head[100010];int root[100010];int sum[4000010];map
b;void add(int x,int y){ tot++; next[tot]=head[x]; head[x]=tot; to[tot]=y;}void dfs(int x,int fa){ s[x]=++num; q[num]=x; for(int i=head[x];i;i=next[i]) { if(to[i]!=fa) { dfs(to[i],x); } } t[x]=num;}int updata(int pre,int l,int r,int v){ int rt=++cnt; if(l==r) { sum[rt]=sum[pre]+1; return rt; } ls[rt]=ls[pre]; rs[rt]=rs[pre]; sum[rt]=sum[pre]+1; int mid=(l+r)>>1; if(v<=mid) { ls[rt]=updata(ls[pre],l,mid,v); } else { rs[rt]=updata(rs[pre],mid+1,r,v); } return rt;}int query(int x,int y,int l,int r,int k){ if(l==r) { return b[l]; } int val=sum[ls[y]]-sum[ls[x]]; int mid=(l+r)>>1; if(val

转载于:https://www.cnblogs.com/Khada-Jhin/p/9449809.html

你可能感兴趣的文章
CF1178D Prime Graph
查看>>
CF1190D Tokitsukaze and Strange Rectangle
查看>>
CF1202F You Are Given Some Letters...
查看>>
CF1179C Serge and Dining Room
查看>>
CF1168B Good Triple
查看>>
CF1208E Let Them Slide
查看>>
AT2000 Leftmost Ball
查看>>
CF1086E Beautiful Matrix
查看>>
在单位上班的25条建议(建议收藏)
查看>>
web前端--http协议
查看>>
欧拉定理证明&阶乘的逆元
查看>>
Prime Game Gym - 101981J(网络流/二分图)
查看>>
Teamwork Gym - 101492E (dp)
查看>>
No Link, Cut Tree! Gym - 101484F(dp)
查看>>
Coprimes Gym - 101492C(bitset)
查看>>
Partial Tree UVALive - 7190(完全背包)
查看>>
『深度应用』NLP机器翻译深度学习实战课程·零(基础概念)
查看>>
『开发技术』Windows极简安装使用face_recognition实现人脸识别
查看>>
『深度应用』NLP命名实体识别(NER)开源实战教程
查看>>
『开发技术』GPU训练加速原理(附KerasGPU训练技巧)
查看>>