POJ 2155:Matrix 二维树状数组
| Time Limit: 3000MS | Memory Limit: 65536K | |
| Total Submissions: 21757 | Accepted: 8141 |
Description
We can change the matrix in the following way. Given a rectangle whose upper-left corner is (x1, y1) and lower-right corner is (x2, y2), we change all the elements in the rectangle by using "not" operation (if it is a '0' then change it into '1' otherwise change
it into '0'). To maintain the information of the matrix, you are asked to write a program to receive and execute two kinds of instructions.
1. C x1 y1 x2 y2 (1 <= x1 <= x2 <= n, 1 <= y1 <= y2 <= n) changes the matrix by using the rectangle whose upper-left corner is (x1, y1) and lower-right corner is (x2, y2).
2. Q x y (1 <= x, y <= n) querys A[x, y].
Input
The first line of each block contains two numbers N and T (2 <= N <= 1000, 1 <= T <= 50000) representing the size of the matrix and the number of the instructions. The following T lines each represents an instruction having the format "Q x y" or "C x1 y1 x2
y2", which has been described above.
Output
There is a blank line between every two continuous test cases.
Sample Input
1
2 10
C 2 1 2 2
Q 2 2
C 2 1 2 1
Q 1 1
C 1 1 2 1
C 1 2 1 2
C 1 1 2 2
Q 1 1
C 1 1 2 1
Q 2 1
Sample Output
1
0
0
1
题意是起始给出一个全为0的矩阵,然后不断地对其子矩阵操作,0变为1,1变为0。然后也不断查询某一个位置的值。
二维树状数组,之前一直理解错了,其实转换的那四块是对上面的部分,不是下面的部分。
代码:
#include <iostream>
#include <algorithm>
#include <cmath>
#include <vector>
#include <string>
#include <cstring>
#pragma warning(disable:4996)
using namespace std;
#define MY_MAX 1100 int tree[MY_MAX*3][MY_MAX*3];
int n,t; int lowbit(int x)
{
return x&(-x);
} int get_num(int x,int y)
{
int sum=0,i,j;
for(i=x;i>0;i=i-lowbit(i))
{
for(j=y;j>0;j=j-lowbit(j))
{
sum += tree[i][j];
}
}
return sum;
} void cal(int x,int y)
{
int i,j;
for(i=x;i<=n;i=i+lowbit(i))
{
for(j=y;j<=n;j=j+lowbit(j))
{
tree[i][j]++;
}
}
} int main()
{
//freopen("i.txt","r",stdin);
//freopen("o.txt","w",stdout); int test,i,x1,y1,x2,y2,x,y;
char oper[10];
scanf("%d",&test); while(test--)
{
scanf("%d%d",&n,&t);
memset(tree,0,sizeof(tree));
for(i=1;i<=t;i++)
{
scanf("%s",oper);
if(oper[0]=='C')
{
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
cal(x2+1,y2+1);
cal(x1,y1);
cal(x1,y2+1);
cal(x2+1,y1);
}
else if(oper[0]=='Q')
{
scanf("%d%d",&x,&y);
printf("%d\n",get_num(x,y)%2);
}
}
printf("\n");
}
//system("pause");
return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
POJ 2155:Matrix 二维树状数组的更多相关文章
- POJ 2155 Matrix(二维树状数组,绝对具体)
Matrix Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 20599 Accepted: 7673 Descripti ...
- poj 2155 Matrix (二维树状数组)
题意:给你一个矩阵开始全是0,然后给你两种指令,第一种:C x1,y1,x2,y2 就是将左上角为x1,y1,右下角为x2,y2,的这个矩阵内的数字全部翻转,0变1,1变0 第二种:Q x1 y1,输 ...
- [poj2155]Matrix(二维树状数组)
Matrix Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 25004 Accepted: 9261 Descripti ...
- 【poj2155】Matrix(二维树状数组区间更新+单点查询)
Description Given an N*N matrix A, whose elements are either 0 or 1. A[i, j] means the number in the ...
- POJ 2029 (二维树状数组)题解
思路: 大力出奇迹,先用二维树状数组存,然后暴力枚举 算某个矩形区域的值的示意图如下,代码在下面慢慢找... 代码: #include<cstdio> #include<map> ...
- poj----2155 Matrix(二维树状数组第二类)
Matrix Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 16950 Accepted: 6369 Descripti ...
- poj 2155 B - Matrix 二维树状数组
#include<iostream> #include<string> #include<string.h> #include<cstdio> usin ...
- POJ2155:Matrix(二维树状数组,经典)
Description Given an N*N matrix A, whose elements are either 0 or 1. A[i, j] means the number in the ...
- Matrix 二维树状数组的第二类应用
Matrix Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 17976 Accepted: 6737 Descripti ...
随机推荐
- 列表推导式、生成器表达式以及zip()max()max()/min()sum()sort()map()filter()的用法
列表推导式: 基本格式: variable = [out_exp_res for out_exp in input_list if out_exp == 2] #out_exp_res: 列表生成元素 ...
- 通过修改select的value值
1 <input type="button" id="btn" value="按钮"/> 2 <select name=& ...
- Xcode Edit Schemes
关于本文:有关“Xcode Edit Schemes”的设置,还是有很大的学问的.由于时间关系,我一点一点的补充. 1.在开发的时候,至少将Run的Build Configuration设置为Debu ...
- runas的替代品CPAU使用
runas替代软件CPAU 在windows系统下,想要实现某个程序不论何时都以指定的用户身份登录,因此找到了CPAU这个软件 cpau官方网站:https://www.joeware.net/fre ...
- 一 Java语言基础
1 标识符: 用来标识类名.变量名.方法名.类型名.数组名.文件名的有效字符序列. 由字母.美元符.下划线.数字组成,不能以数字开头,如 int 6a = 1; 2 基本数据类型8个: 整数4个:字 ...
- 全方位深入理解JavaScript面向对象
JavaScript面向对象程序设计 转载:https://blog.csdn.net/lihangxiaoji/article/details/79753473#72__871 本文会碰到的知识点: ...
- VUE框架下安装自带http协议
在控制台CMD 中输入 npm install vue-resource --save-dev
- docker学习笔记-05:DockerFile解析
一.DockerFile是什么 1.DockerFile是用来构建docker镜像的构建文件,是由一系列参数和命令构成的脚本. 2.构建三步骤: 手动编写一个dockerfile文件,然后直接dock ...
- vue移动端transition兼容
vue移动端transition兼容 .face-recognition .wrapper(:style="{height: viewHeight+'px'}") .face-re ...
- Mybatis入门(六)联查之一对多
上一章说了多对一,很多学生被一个老师教,这一章是一个老师教很多学生 目录基本没有变化只是改了配置文件: 2.配置文件: TeacherMapper接口类: package com.hdlf.dao; ...