栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

zoj 3686 A Simple Tree Problem

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

zoj 3686 A Simple Tree Problem

#include <iostream>#include <algorithm>#include <cstdio>#include <cstring>#include <map>#include <queue>#include <set>#include <stack>#include <cmath>#include <ctime>using namespace std;#define N 100005#define lson l,mid,p<<1#define rson mid+1,r,p<<1|1#define demid int mid=(l+r)>>1int segt[N<<2],col[N<<2],n,m;vector<int>tr[N];int a[N],cnt,pre[N],hash[N];int dfs(int u){ int Min=1<<29; for(int i=0;i<tr[u].size();i++){ int v=tr[u][i]; Min=min(Min,dfs(v)); } ++cnt; Min=min(Min,cnt); a[cnt]=u; pre[cnt]=Min; hash[u]=cnt; return Min;}void settree(){ for(int i=1;i<=n;i++) tr[i].clear(); for(int i=2;i<=n;i++){ int u; scanf("%d",&u); tr[u].push_back(i); } cnt=0; dfs(1); memset(segt,0,sizeof(segt)); memset(col,0,sizeof(col));}void pushdown(int l,int r,int p){ if(col[p]){ demid; int nl=mid-l+1,nr=r-mid; segt[p<<1]=nl-segt[p<<1]; segt[p<<1|1]=nr-segt[p<<1|1]; col[p<<1]=(!col[p<<1]); col[p<<1|1]=(!col[p<<1|1]); } col[p]=0;}void pushup(int p){ segt[p]=segt[p<<1]+segt[p<<1|1];}void update(int L,int R,int l,int r,int p){ if(L<=l && r<=R){ int num=r-l+1; segt[p]=num-segt[p]; col[p]=(!col[p]); return; } pushdown(l,r,p); demid; if(L<=mid) update(L,R,lson); if(mid<R) update(L,R,rson); pushup(p);}int query(int L,int R,int l,int r,int p){ if(L<=l && r<=R){ return segt[p]; } pushdown(l,r,p); demid; int res=0; if(L<=mid) res+=query(L,R,lson); if(mid<R) res+=query(L,R,rson); return res;}int main(){ while(cin>>n>>m){ settree(); while(m--){ char key[5]; int u; scanf("%s%d",key,&u); if(key[0]=='o'){ int r=hash[u],l=pre[r]; update(l,r,1,n,1); } else{ int r=hash[u],l=pre[r]; printf("%dn",query(l,r,1,n,1)); } } puts(""); } return 0;}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/379146.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号