bzoj1803: Spoj1487 Query on a tree III
来源:互联网 发布:vb 判断文件是否存在 编辑:程序博客网 时间:2024/06/05 08:37
传送门
显然看到子树九要想到dfs序。
按照dfs序建立主席树。
然后就在树上贪心往右走就可以了。
#include<cmath>#include<cstdio>#include<cstdlib>#include<cstring>#include<iostream>#include<algorithm>#define N 100005using namespace std;struct edge{int to,next;}e[N*2];int head[N],pos[N],mx[N],rt[N],val[N],fa[N];int cnt,tot,sz,n,Q,x,y;int ls[N*32],rs[N*32],sum[N*32],fl[N*32];void add(int x,int y){ e[++tot]=(edge){y,head[x]}; head[x]=tot;}void add(int x,int &nx,int l,int r,int v,int id){ nx=++sz; sum[nx]=sum[x]+1; ls[nx]=ls[x]; rs[nx]=rs[x]; if (l==r){ fl[nx]=id; return; } int mid=(l+r)/2; if (v<=mid) add(ls[x],ls[nx],l,mid,v,id); else add(rs[x],rs[nx],mid+1,r,v,id);}void solve(int x,int y,int l,int r,int rk){ if (l==r){ printf("%d\n",fl[y]); return; } int mid=(l+r)/2; if (sum[ls[y]]-sum[ls[x]]>=rk) solve(ls[x],ls[y],l,mid,rk); else solve(rs[x],rs[y],mid+1,r,rk-sum[ls[y]]+sum[ls[x]]);}void dfs(int x){ pos[x]=++cnt; add(rt[cnt-1],rt[cnt],1,1e9,val[x],x); for (int i=head[x];i;i=e[i].next) if (e[i].to!=fa[x]) fa[e[i].to]=x,dfs(e[i].to); mx[x]=cnt;}int main(){ scanf("%d",&n); for (int i=1;i<=n;i++) scanf("%d",&val[i]); for (int i=1;i<n;i++){ scanf("%d%d",&x,&y); add(x,y); add(y,x); } dfs(1); scanf("%d",&Q); while (Q--){ scanf("%d%d",&x,&y); solve(rt[pos[x]-1],rt[mx[x]],1,1e9,y); }}
阅读全文
0 0
- BZOJ1803: Spoj1487 Query on a tree III
- [BZOJ1803] Spoj1487 Query on a tree III
- bzoj1803: Spoj1487 Query on a tree III
- bzoj1803: Spoj1487 Query on a tree III
- [BZOJ1803]Spoj1487 Query on a tree III(dfs序+主席树)
- [BZOJ1803][Spoj1487]Query on a tree III(dfs序+主席树)
- 1803: Spoj1487 Query on a tree III
- SPOJ1487. Query on a tree III 树链剖分+主席树
- [主席树] BZOJ 1803 Spoj1487 Query on a tree III
- bzoj 1803: Spoj1487 Query on a tree III(主席树)
- BZOJ 1803: Spoj1487 Query on a tree III 主席树题解
- Query on A Tree
- 3804 Query on a tree
- SPOJ Query on a tree
- Query on a tree II
- [SPOJ375]Query on a tree
- SPOJ375 Query on a tree
- SPOJ375 Query on a tree
- leetcode | Path Sum II
- unity UGUI 2048 控制移动
- 队列求迷宫问题
- jdk之BitSet位运算解析
- 嵌入式实训总结
- bzoj1803: Spoj1487 Query on a tree III
- mybatis配置
- JavaSE重新学习
- 13.折半法(二分法)判断该数是否存在于数组
- PyQt5+python3+pycharm开发环境配置
- nginx源码学习(二)ngx_init_cycle(&init_cycle)函数解析
- 期末总结
- 获取form内iframe中的textarea(kindeditor)的值
- caffe 网络结构参数介绍及可视化