二维线段树
来源:互联网 发布:毕业设计单片机 编辑:程序博客网 时间:2024/06/03 16:31
#include<iostream>#include<cstdio>#include<cstring>using namespace std;int x,n,t;bool ans,f[4010][4010];void updatey(int p,int q,int l,int r,int y1,int y2){if(y1==l&&y2==r){f[p][q]^=1;return;}int mid=(l+r)>>1;if(mid>=y2)updatey(p,q<<1,l,mid,y1,y2);else if(mid<y1)updatey(p,q<<1|1,mid+1,r,y1,y2);else{updatey(p,q<<1,l,mid,y1,mid);updatey(p,q<<1|1,mid+1,r,mid+1,y2);}}void updatex(int p,int l,int r,int x1,int y1,int x2,int y2){if(x1==l&&x2==r){updatey(p,1,1,n,y1,y2);return;}int mid=(l+r)>>1;if(mid>=x2)updatex(p<<1,l,mid,x1,y1,x2,y2);else if(mid<x1)updatex(p<<1|1,mid+1,r,x1,y1,x2,y2);else{updatex(p<<1,l,mid,x1,y1,mid,y2);updatex(p<<1|1,mid+1,r,mid+1,y1,x2,y2);}}void queryy(int p,int q,int l,int r,int y){ans^=f[p][q];if(l==r)return;int mid=(l+r)>>1;if(y<=mid)queryy(p,q<<1,l,mid,y);elsequeryy(p,q<<1|1,mid+1,r,y);}void queryx(int p,int l,int r,int x,int y){queryy(p,1,1,n,y);if(l==r)return;int mid=(l+r)>>1;if(x<=mid)queryx(p<<1,l,mid,x,y);elsequeryx(p<<1|1,mid+1,r,x,y);}int main(){scanf("%d",&x);while(x--){memset(f,0,sizeof(f));scanf("%d%d",&n,&t);char s[2];int x,y,xx,yy;for(int tt=t;tt;--tt){scanf("%s",s);if(s[0]=='C'){scanf("%d%d%d%d",&x,&y,&xx,&yy);updatex(1,1,n,x,y,xx,yy);}else{ans=0;scanf("%d%d",&x,&y);queryx(1,1,n,x,y);printf("%d\n",ans);}}if(x)puts("");}return 0;}
0 0
- 二维线段树
- poj1656----二维线段树
- poj2155 二维线段树
- hdu1823 二维线段树
- POJ2155 二维线段树
- hdu1823 二维线段树
- HDU1823(二维线段树)
- poj2155 二维线段树
- CUGBACM_Summer_Tranning2【二维线段树】
- 二维线段树
- hdu1823 二维线段树
- hdu4819 二维线段树
- 二维线段树模版
- 二维线段树模板
- POJ2155二维线段树
- 二维线段树UVA11297
- uva11297 二维线段树
- 二维线段树 题集
- andn 招聘 行情 去年的
- C++基础 (一)面向对象
- java多线程例子1
- hdu5776
- 好读书不求甚解(一)Java多线程编程核心技术
- 二维线段树
- 前端们,gulp该用起来了,简单的demo入门——gulp系列(一)
- hdu5894hannnnah_j’s Biological Test
- 一篇不错的讲解Java异常的文章
- hdu1671
- LeNet-5手写数字识别——可训练参数的求解详解
- 基本的Xml文件读取工具类(通用)
- startup.bat详解
- javascript中的innerHTML是什么意思,怎么个用法?