XDOJ 1181
来源:互联网 发布:华为紧急数据怎么处理 编辑:程序博客网 时间:2024/05/22 04:34
晚上写了一发主席树回忆了一下。
wa点在线段树求和的l1和l与r1和r看错地方了,直到看得眼睛痛了才发现。
#include <iostream>#include <stdio.h>#include <vector>#include <string.h>#include <algorithm>using namespace std;const int maxn=1e6+7;int cnt;struct ttt{int l,r,sum;};int root[maxn];ttt T[maxn*5];int X;int C;int update(int l,int r,int &x,int y,int pos){T[++cnt]=T[y];x=cnt;int x1=cnt;if(l==r){ T[x1].sum+=X; C=T[x1].sum; return 0;}int mid=(l+r)/2;if(pos<=mid) { update(l,mid,T[x].l,T[y].l,pos); }else{ update(mid+1,r,T[x].r,T[y].r,pos);}T[x1].sum=0;if(T[x1].l) T[x1].sum=T[T[x1].l].sum; if(T[x1].r)T[x1].sum+=T[T[x1].r].sum;}int Sum;int query(int l,int r,int l1,int r1,int t,int num){ if(l1<=l&&r1>=r){ Sum+=T[num].sum;return 0; }else{ int mid=(l+r)/2; if(l1>mid){ if(T[num].r!=0)query(mid+1,r,l1,r1,t,T[num].r); }else if(r1<=mid){ if(T[num].l!=0)query(l,mid,l1,r1,t,T[num].l); }else{ if(T[num].r!=0)query(mid+1,r,l1,r1,t,T[num].r); if(T[num].l!=0)query(l,mid,l1,r1,t,T[num].l); } }}int main(){int i,j,k,f1,f2,f3,f4,t1,t2,t3,t4,n,m;//freopen("in.txt","r",stdin);cin >> n>> m;C=0;int l1,r1;int ro1=1;for(i=1;i<=m;i++){ scanf("%d",&t1); if(t1==1){ scanf("%d %d",&t2,&X); C=t2^C; update(1,n,root[ro1],root[ro1-1],C); ro1++; }else{ scanf("%d %d %d",&t2,&t3,&t4); l1=t2^C;r1=t3^C; Sum=0; query(1,n,l1,r1,t4,root[t4]); C=Sum; printf("%d\n",Sum); }}return 0;}
阅读全文
0 0
- XDOJ 1181
- XDOJ-1003
- xdoj 1012
- xdoj-1111
- xdoj-1109
- xdoj-1042
- xdoj-1109
- xdoj-1040
- xdoj-1011
- xdoj-1022
- xdoj-1056
- xdoj-1055
- xdoj-1003
- XDOJ 1233
- XDOJ 1213
- XDOJ 1107
- XDOJ 1229
- XDOJ 1006
- Word2013文章如何直接发布到CSDN博客
- 博弈论快速入门
- Grid layout入门
- shell学习六-----变量替换
- HDU
- XDOJ 1181
- 怎样查看本机外网ip
- sqlite3数据库命令
- 怎么打开VisualSVN图形化管理界面
- 使用Jenkins进行Android自动打包
- tensorflow之路-如何处理原始文本数据
- 已知集合A和B的元素分别用不含头结点的单链表存储, 求解集合A与B的差集,并将结果保存在集合A的单链表中
- JAVA学习笔记
- 使用javaNIO实现C/S模式的通信