POJ 2155 Matrix
来源:互联网 发布:数据统计表格怎么做 编辑:程序博客网 时间:2024/04/28 00:32
二维树状数组。每个矩阵翻转后令从四个角为左上角到[n,n]为右下角矩阵+1或-1。以记录翻转次数。所有与要查询点有关的翻转都在当前点为右下角的矩阵中。求和模2即可求出结果。
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
#define N 1005
int n;
int c[N][N];
int lowbit(int x) {
return x & (-x) ;
}
int sum(int x,int y) {
int sum = 0;
int x0 = x , y0 = y;
while(x > 0) {
y = y0;
while(y > 0) {
sum += c[x][y];
y -= lowbit(y);
}
x -= lowbit(x);
}
return sum;
}
void add(int x , int y , int d) {
int x0 = x , y0 = y;
while(x <= n) {
y = y0;
while(y <= n) {
c[x][y] += d;
y += lowbit(y);
}
x += lowbit(x);
}
}
int main()
{
int num;
scanf("%d" , &num);
char ch;
int t;
while(num --) {
memset(c,0,sizeof(c));
scanf("%d%d" , &n , &t);
for(int i = 0 ; i < t ; i ++) {
getchar();
scanf("%c" , &ch);
if(ch == 'C') {
int x1 , y1 , x2 , y2;
scanf("%d%d%d%d" , &x1 , &y1 , &x2 , &y2);
add (x2+1 , y2+1 , 1);
add (x1 , y2+1 , -1);
add (x2+1 , y1 , -1);
add (x1 , y1 , 1);
}
else {
int x , y;
scanf("%d%d" , &x , &y);
printf("%d\n" , (sum(x , y)&1));
}
}
printf("\n");
}
return 0;
}
- 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
- 保护模式及其编程——分页机制
- web安全核心机制
- 在 WinDbg 脚本中使用参数
- js左右弹性滚动对联广告代码
- 数据结构常考面试题
- POJ 2155 Matrix
- 舵机应用
- erlang 自己搞定一个简单的MakeFile
- 寒假训练--图的基本知识
- 显示不同tr
- 低权限进程向高权限进程发送wm_copydata消息失败的原因
- error:no such partition grub rescue 的解决方案
- Make a Windbg By Yourself(一)
- Php Select 查询语句的例子