3720: Gty的妹子树
2016-04-30 09:53
253 查看
树分块..
#include<bits/stdc++.h> #define rep(i,k,n) for(int i=k;i<=(n);i++) using namespace std; const int N=60105; int n,lastans=0,Size,w ,m,belong ,cnt=0,fa ,ans; struct E{ int to,next; E(int to=0,int next=0):to(to),next(next){} }edge[2][N<<1]; int head[2] ,tot[2]; void add(int x,int y,int op){ edge[op][++tot[op]]=E(y,head[op][x]);head[op][x]=tot[op]; if(!op){edge[op][++tot[op]]=E(x,head[op][y]);head[op][y]=tot[op];} } struct block{ int size;int G[211]; block(){size=0;} int query(int y){ return size-(upper_bound(G+1,G+1+size,y)-G)+1; } void insert(int x){size++; for(int i=size;i>=1;i--){ // if(G[i-1]>x)G[i]=G[i-1]; else {G[i]=x;break;} } } void modify(int x,int y){ int pos=lower_bound(G+1,G+1+size,x)-G; G[pos]=y; for(int i=pos+1;i<=size;i++)if(G[i-1]>G[i])swap(G[i-1],G[i]);else break; for(int i=pos;i>=1;i--)if(G[i-1]>G[i])swap(G[i-1],G[i]);else break; } }b[30100]; void dfs(int x){ if(b[belong[fa[x]]].size>=Size){ belong[x]=++cnt; b[cnt].insert(w[x]); add(belong[fa[x]],cnt,1); } else{int v=belong[fa[x]]; belong[x]=v; b[v].insert(w[x]); } for(int i=head[0][x];i;i=edge[0][i].next){ int v=edge[0][i].to; if(v!=fa[x]){ fa[v]=x;dfs(v); } } } void Dfs(int x,int y){ ans+=b[x].query(y); for(int i=head[1][x];i;i=edge[1][i].next){ int v=edge[1][i].to; Dfs(v,y); } } void solve(int x,int y){ if(w[x]>y)ans++; for(int i=head[0][x];i;i=edge[0][i].next){ int v=edge[0][i].to; if(v!=fa[x]){ if(belong[v]==belong[x])solve(v,y); else Dfs(belong[v],y); } } } int main(){ //freopen("in.in","r",stdin); //freopen("out.out","w",stdout); scanf("%d",&n); Size=sqrt(n)+1; int x,y,op; rep(i,1,n-1){ scanf("%d%d",&x,&y);add(x,y,0); }rep(i,1,n)scanf("%d",&w[i]); dfs(1); cin>>m; rep(i,1,m){ scanf("%d%d%d",&op,&x,&y);x^=lastans;y^=lastans; switch(op){ case 0: ans=0;solve(x,y); lastans=ans; printf("%d\n",ans); break; case 1: b[belong[x]].modify(w[x],y);w[x]=y; break; case 2: w[++n]=y;fa =x; add(x,n,0); dfs(n); } } return 0; }
相关文章推荐
- parolBot在VS2010中运行配置问题
- 创建一个栈存储结构,并且写入一些对栈的基本的操作
- Single Sign On
- 跨程序共享数据,探究内容提供器
- Elasticsearch 数据建模 - 处理关联关系(1)
- Maven学习总结(18)——深入理解Maven仓库
- Maven学习总结(18)——深入理解Maven仓库
- bzoj 4513: [Sdoi2016]储能表
- Tomcat7并发优化
- Android ActivityManagerService 基本构架详解
- Maven学习总结(18)——深入理解Maven仓库
- tomcat7并发和线程数
- Errors while building APK. You can find the errors in the 'Messages' view.
- 学习笔记 第十周 第二篇
- Less10分钟入门
- 2331: [SCOI2011]地板
- Java千百问_06数据结构(001)_java中数据类型是什么
- python_正则表达式(一)基础标识符
- bzoj2527: [Poi2011]Meteors
- Bebug与Release版本