【bzoj 4756】Promotion Counting(线段树合并)
来源:互联网 发布:linux创建脚本文件 编辑:程序博客网 时间:2024/06/05 10:43
传送门biu~
对于每一个节点建一个权值线段树。遍历每一棵子树,然后将子树的线段树合并到自己的线段树上。
#include<bits/stdc++.h>#define N 100005using namespace std;int n,ans[N];struct Node{ Node*ch[2]; int L,R,sum; Node(int l,int r){ L=l;R=r; sum=0; ch[0]=ch[1]=NULL; } Node(){} void maintain(){ sum=0; if(ch[0]) sum+=ch[0]->sum; if(ch[1]) sum+=ch[1]->sum; }}*root[N];void Merge(Node* &x,Node* &y){ if(!y) return; if(!x){ x=y; return; } x->sum+=y->sum; Merge(x->ch[0],y->ch[0]); Merge(x->ch[1],y->ch[1]);}void Insert(Node* &x,int v,int L,int R){ if(!x) x=new Node(L,R); if(x->L==x->R){ ++x->sum; return; } int mid=L+R>>1; if(v<=mid) Insert(x->ch[0],v,L,mid); else Insert(x->ch[1],v,mid+1,R); x->maintain();}int Query(Node* x,int v){ if(!x) return 0; if(v==x->R) return x->sum; int mid=x->L+x->R>>1; if(v<=mid) return Query(x->ch[0],v); return (x->ch[0] ? x->ch[0]->sum : 0) + Query(x->ch[1],v);}int a[N],b[N];int head[N],nex[N],to[N],tp;void add(int x,int y){ nex[++tp]=head[x]; head[x]=tp; to[tp]=y;}void dfs(int x){ for(int i=head[x];i;i=nex[i]){ dfs(to[i]); Merge(root[x],root[to[i]]); } ans[x]=Query(root[x],n-a[x]); Insert(root[x],n-a[x]+1,1,n);}int main(){ scanf("%d",&n); for(int i=1;i<=n;++i) scanf("%d",&a[i]),b[i]=a[i]; sort(b+1,b+n+1); int m=unique(b+1,b+n+1)-b-1; for(int i=1;i<=n;++i) a[i]=lower_bound(b+1,b+m+1,a[i])-b; for(int i=2;i<=n;++i){ int x; scanf("%d",&x); add(x,i); } dfs(1); for(int i=1;i<=n;++i) printf("%d\n",ans[i]); return 0;}
阅读全文
0 0
- bzoj 4756: [Usaco2017 Jan]Promotion Counting (线段树合并)
- BZOJ 4756 Promotion Counting(线段树合并 || dfs)
- 【bzoj 4756】Promotion Counting(线段树合并)
- BZOJ 4756 [Usaco2017 Jan]Promotion Counting 线段树合并
- BZOJ[4756][Usaco2017 Jan]Promotion Counting 线段树合并
- 4756: [Usaco2017 Jan]Promotion Counting 线段树合并
- BZOJ 4756 [Usaco2017 Jan]Promotion Counting dfs序+主席树
- bzoj 4756: [Usaco2017 Jan]Promotion Counting
- bzoj 4756(线段树合并)
- 4756: [Usaco2017 Jan]Promotion Counting
- 线段树学习(2)POI Promotion
- bzoj 2212(线段树合并)
- bzoj 4756: [Usaco2017 Jan]Promotion Counting dsu on tree+树状数组
- 洛谷 P3605 [USACO17JAN]Promotion Counting晋升者计数——树状数组,权值线段树
- BZOJ 3123 线段树合并
- USACO2017JanuaryPlatinum Promotion Counting(奶牛升职计数)
- [BZOJ]2809: [Apio2012]dispatching 主席树(线段树合并)
- bzoj 2733: [HNOI2012]永无乡(线段树合并)
- 比较
- 嵌入式 vlc从接收到数据流到播放视频的过程分析
- 你所不了解的深度神经网络
- Android版本对应能支持的手机百分比 api
- 数列有序!
- 【bzoj 4756】Promotion Counting(线段树合并)
- qt中的菜单QMenu QAction
- git基本使用方式
- Android应用主界面底部菜单实现
- 服务器安装问题补充
- elasticsearch-java api之索引(index)的各种操作
- json数组的js增删改
- mysql--目录
- 物理备库ORA 01274问题处理