#include<cstring>#include<iostream>#include<utility>usingnamespacestd;usingLL=longlong;template<intN>structWBLT{staticconstexprdoublealpha=0.292;intch[N<<1][2],siz[N<<1],tot,root,tsh[N<<1],tct;intval[N<<1];LLsum[N<<1];boolrev[N<<1];intuse[N<<1];WBLT(){root=newnode(-(int)((1u<<31)-1));}boolisleaf(intp){return!ch[p][0];}voiddestroy(intp){tsh[++tct]=p;}voidclone(intp,intq){memcpy(ch[p],ch[q],sizeofch[0]);val[p]=val[q];siz[p]=siz[q];sum[p]=sum[q];rev[p]=rev[q];if(!isleaf(p)){use[ch[p][0]]+=1;use[ch[p][1]]+=1;}}intnewnode(LLv){intp=tct?tsh[tct--]:++tot;memset(ch[p],0,sizeofch[p]);val[p]=v;siz[p]=1;sum[p]=v;rev[p]=false;use[p]=1;returnp;}voidrefresh(int&p){if(use[p]<=1)return;use[p]-=1;intq=exchange(p,newnode(0));clone(p,q);}voidmaintain(intp){// also known as: pushupif(isleaf(p))return;val[p]=val[ch[p][1]];sum[p]=sum[ch[p][0]]+sum[ch[p][1]];siz[p]=siz[ch[p][0]]+siz[ch[p][1]];}voidspread(int&p){if(isleaf(p))return;refresh(p);rev[p]^=1;}voidpushdown(intp){if(!rev[p]||isleaf(p))return;spread(ch[p][0]),spread(ch[p][1]);swap(ch[p][0],ch[p][1]);rev[p]=false;}voidrotate(intp,intr){if(isleaf(p)||isleaf(ch[p][r]))return;refresh(ch[p][r]);pushdown(ch[p][r]);intq=ch[p][r];swap(ch[p][0],ch[p][1]);swap(ch[p][r],ch[q][r]);swap(ch[q][0],ch[q][1]);maintain(q);maintain(p);}voidupdate(intp){// also known as: maintainif(isleaf(p))return;intr=siz[ch[p][0]]<siz[ch[p][1]];if(siz[ch[p][!r]]>=siz[p]*alpha)return;refresh(ch[p][r]);pushdown(ch[p][r]);if(siz[ch[ch[p][r]][!r]]>=siz[ch[p][r]]*(1-alpha*2)/(1-alpha))rotate(ch[p][r],!r);rotate(p,r);}voidinsert(int&p,intv,intk){refresh(p);pushdown(p);intr=siz[ch[p][0]]<k;if(isleaf(p)){ch[p][0]=newnode(val[p]);ch[p][1]=newnode(v);}else{if(r)k-=siz[ch[p][0]];insert(ch[p][r],v,k);}maintain(p);update(p);}voiderase(int&p,intk){refresh(p);pushdown(p);intr=siz[ch[p][0]]<k;if(isleaf(ch[p][r])){use[ch[p][0]]-=1;use[ch[p][1]]-=1;clone(p,ch[p][!r]);}else{if(r)k-=siz[ch[p][0]];erase(ch[p][r],k);}maintain(p);update(p);}intmerge(intp,intq){if(!p||!q)returnp+q;if(min(siz[p],siz[q])>=alpha*(siz[p]+siz[q])){intt=newnode(0);ch[t][0]=p,use[p]+=1;ch[t][1]=q,use[q]+=1;maintain(t);returnt;}if(siz[p]>=siz[q]){pushdown(p);if(siz[ch[p][0]]>=alpha*(siz[p]+siz[q])){returnmerge(ch[p][0],merge(ch[p][1],q));}else{pushdown(ch[p][1]);returnmerge(merge(ch[p][0],ch[ch[p][1]][0]),merge(ch[ch[p][1]][1],q));}}else{pushdown(q);if(siz[ch[q][1]]>=alpha*(siz[p]+siz[q])){returnmerge(merge(p,ch[q][0]),ch[q][1]);}else{pushdown(ch[q][0]);returnmerge(merge(p,ch[ch[q][0]][0]),merge(ch[ch[q][0]][1],ch[q][1]));}}}voidsplit(intp,intk,int&x,int&y){if(!k)returnx=0,y=p,void();if(isleaf(p))returnx=p,y=0,void();pushdown(p);if(k<=siz[ch[p][0]]){split(ch[p][0],k,x,y);y=merge(y,ch[p][1]);}else{split(ch[p][1],k-siz[ch[p][0]],x,y);x=merge(ch[p][0],x);}}LLgetsum(intL,intR,int&p,intl,intr){if(L<=l&&r<=R)returnsum[p];pushdown(p);intmid=l+siz[ch[p][0]]-1;LLret=0;if(L<=mid)ret+=getsum(L,R,ch[p][0],l,mid);if(mid<R)ret+=getsum(L,R,ch[p][1],mid+1,r);returnret;}LLgetsum(int&p,intL,intR){returngetsum(L+1,R+1,p,1,siz[p]);}};WBLT<6400010>t;intm;introot[500010];intmain(){cin.tie(nullptr)->sync_with_stdio(false);cin>>m;root[0]=t.root;LLlastans=0;for(inti=1;i<=m;i++){LLop,l,r;intv;cin>>v>>op>>l;t.use[root[i]=root[v]]+=1;if(op!=2)cin>>r;l^=lastans,r^=lastans;intx,y,z;switch(op){case1:t.insert(root[i],r,l+1);break;case2:t.erase(root[i],l+1);break;case3:t.split(root[i],l,x,y);t.split(y,r-l+1,y,z);t.spread(y);root[i]=t.merge(x,t.merge(y,z));break;case4:cout<<(lastans=t.getsum(root[i],l,r))<<endl;break;}}return0;}