poj 2155 Matrix
来源:互联网 发布:如何提取整套的源码 编辑:程序博客网 时间:2024/04/29 07:45
题意:给你一个n×n的01矩形,初始值全为0,并要你进行几个操作:1.对子矩阵(x1,y1,x2,y2)进行反选; 2.询问(x,y)的值;
二维树状数组的思路并不难想到,但是这题和一般的二维树状数组有点不一样,这题是修改区间,询问点。于是我们便可以用getsum修改,用update查询;
代码如下:
{$inline on}vara:array[1..1024,1..1024]of boolean;m,n,i,j:longint;function lowbit(x:longint):longint;inline;beginexit(x and(-x));end;procedure getsum(x,y:longint);inline;vari,j:longint;begini:=x;while i>0 do begin j:=y; while j>0 do begin a[i,j]:=not a[i,j]; j:=j-lowbit(j); end; i:=i-lowbit(i); end;end;function update(x,y:longint):longint;inline;vari,j:longint;ans:boolean;begini:=x;ans:=false;while i<=n do begin j:=y; while j<=n do begin ans:=ans xor a[i,j]; j:=j+lowbit(j); end; i:=i+lowbit(i); end;if ans then exit(1)else exit(0);end;procedure main;inline;varx1,x2,y2,y1,i,j,k:longint;ch:char;beginfillchar(a,sizeof(a),false);readln(n,m);for i:=1 to m do begin read(ch); if ch='C' then begin readln(x1,y1,x2,y2); getsum(x1-1,y1-1); getsum(x1-1,y2); getsum(x2,y1-1); getsum(x2,y2); end else begin readln(x1,y1); writeln(update(x1,y1)); end; end;end;beginreadln(j);for i:=1 to j do begin main; writeln;{一定要打,否则会PE。好坑啊!} end;end.若仍看不懂,可以看一下http://blog.sina.com.cn/s/blog_6a16f43f0100m7fw.html个人感觉他写得还不错。
- poj 2155 Matrix
- poj 2155 Matrix
- poj 2155 Matrix
- Poj 2155 Matrix
- poj 2155 Matrix
- POJ 2155 Matrix
- POJ 2155 - Matrix
- poj 2155 Matrix
- POJ 2155 Matrix
- Poj 2155 Matrix
- POJ-2155-Matrix
- POJ 2155: Matrix
- poj 2155 Matrix
- POJ 2155 Matrix
- poj 2155 Matrix
- POJ 2155 Matrix
- POJ 2155 Matrix
- poj 2155 Matrix
- 只有spfile和控制文件情况下进行rman恢复时报ORA-00312 ORA-00313错误
- Rhadoop实战:统计邮箱域名出现次数
- Quartz集成spring开发大全
- C++中创建对象的两种方法及其区别
- BulletedList使用及详解
- poj 2155 Matrix
- OpenGL ES 三种类型修饰 uniform attribute varying
- 字符缩进 text-indent:0.5em;
- onWindowFocusChanged重要作用 and Activity生命周期
- 程序员必看的十大电影
- Linux Shell 进制错误 - value too great for base
- framebuffer设备测试操作
- java线程之sleep、interrupt方法
- Eclipse发布项目时出现Conversion toDalvik format ... 的解决方案