[BZOJ1803][Spoj1487]Query on a tree III(dfs序+主席树)
来源:互联网 发布:什么软件可以看轻小说 编辑:程序博客网 时间:2024/06/05 10:26
题目:
我是超链接
题解:
记得以前链剖求子树的时候都是dfs序,感觉这里也可以随便搞搞?
按照dfs序建立主席树然后跑就好啦
dfs序:
in[x]=++nn;
…遍历
out[x]=nn;
代码:
#include <map>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int N=1e5+5;struct hh{int l,r,w;}t[N*20];int tot,nxt[N*2],point[N],v[N*2],in[N],nn,out[N],sz,s,who[N],root[N],b[N],a[N],p[N];map<int,int>mp;void addline(int x,int y){ ++tot; nxt[tot]=point[x]; point[x]=tot; v[tot]=y; ++tot; nxt[tot]=point[y]; point[y]=tot; v[tot]=x;}void dfs(int x,int fa){ in[x]=++nn;who[nn]=x; for (int i=point[x];i;i=nxt[i]) if (v[i]!=fa) dfs(v[i],x); out[x]=nn;}void insert(int &now,int l,int r,int x){ t[++sz]=t[now]; now=sz; t[now].w++; if (l==r) return; int mid=(l+r)>>1; if (x<=mid) insert(t[now].l,l,mid,x); else insert(t[now].r,mid+1,r,x);}int qurry(int i,int j,int l,int r,int k){ if (l==r) return l; int mid=(l+r)>>1,sum=t[t[j].l].w-t[t[i].l].w; if (sum>=k) return qurry(t[i].l,t[j].l,l,mid,k); else return qurry(t[i].r,t[j].r,mid+1,r,k-sum);}int main(){ int n; scanf("%d",&n); for (int i=1;i<=n;i++) scanf("%d",&a[i]),b[++s]=a[i]; sort(b+1,b+s+1); s=unique(b+1,b+s+1)-b-1; for (int i=1;i<=n;i++) p[i]=lower_bound(b+1,b+s+1,a[i])-b,mp[p[i]]=i; for (int i=1;i<n;i++) { int x,y; scanf("%d%d",&x,&y); addline(x,y); } dfs(1,0); for (int i=1;i<=n;i++) { root[i]=root[i-1]; insert(root[i],1,s,p[who[i]]); } int q,x,k; scanf("%d",&q); while (q--) { scanf("%d%d",&x,&k); int l=in[x],r=out[x]; printf("%d\n",mp[qurry(root[l-1],root[r],1,s,k)]); }}
阅读全文
1 0
- [BZOJ1803]Spoj1487 Query on a tree III(dfs序+主席树)
- [BZOJ1803][Spoj1487]Query on a tree III(dfs序+主席树)
- 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
- 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 主席树题解
- 1803: Spoj1487 Query on a tree III
- SPOJ PTO7J Query on a tree III(dfs序+主席树)
- SPOJ PT07J Query on a tree III(dfs序,主席树)
- SPOJ 1487 Query on a tree III 主席树,可持续化线段树
- spoj Query on a tree3/bzoj 1803(DFS序+主席树)
- bzoj2588 Count on a tree dfs&主席树
- [BZOJ 2588][SPOJ COT]Count On a Tree(DFS序主席树)
- [省选前题目整理][BZOJ 2588][SPOJ COT]Count On a Tree(DFS序主席树)
- 学习安卓第一周
- Java集合之三List接口及其实现类ArrayList、LinkedList、Vector
- js原生ajax与jQuery的ajax
- 根据Request获取客户端IP
- 使用MVP搜索页面到商品列表与商品详情
- [BZOJ1803][Spoj1487]Query on a tree III(dfs序+主席树)
- Spark Streaming中如何实现Exactly-Once
- RabbitMQ用户增删及权限控制
- RabbitMQ vhost 配置
- Java语言的一些小总结
- RabbitMQ磁盘警报
- angular 全选 全删 修改 排序
- 移动端常见问题总结
- RabbitMQ-Java客户端API指南-上