【POJ2155】【二维树状数组】Matrix
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
Source
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <vector>
#include <utility>
#include <iomanip>
#include <string>
#include <cmath>
#include <map> const int MAXN = + ;
const int MAX = + ;
using namespace std;
int n, m;//m为操作次数
int C[MAXN][MAXN]; int lowbit(int x){return x&-x;}
/*int sum(int x, int y){
int cnt = 0, tmp;
while (x > 0){
tmp = y;
while (tmp > 0){
cnt += C[x][tmp];
tmp -= lowbit(tmp);
}
x -= lowbit(x);
}
return cnt;
}
void add(int x, int y, int val){
int tmp;
while (x <= 1000){
tmp = y;
while (tmp <= 1000){
C[x][tmp] += val;
tmp += lowbit(tmp);
}
x += lowbit(x);
}
return;
}*/
void add(int x,int y) {
int i,k;
for(i=x; i<=n; i+=lowbit(i))
for(k=y; k<=n; k+=lowbit(k))
C[i][k]++;
}
int sum(int x,int y) {
int i,k,cnt = ;
for(i=x; i>; i-=lowbit(i))
for(k=y; k>; k-=lowbit(k))
cnt += C[i][k];
return cnt;
} void work(){
scanf("%d%d", &n, &m);
for (int i = ; i <= m; i++){
char str[];
scanf("%s", str);
if (str[] == 'Q'){
int x, y;
scanf("%d%d", &x, &y);
//x++;y++;
printf("%d\n", sum(x, y)%);
}else if (str[] == 'C'){
int x1, y1, x2, y2;
scanf("%d%d%d%d", &x1, &y1, &x2, &y2);
x1++;y1++;x2++;y2++;
add(x2, y2);
add(x2, y1 - );
add(x1 - , y2);
add(x1 - , y1 - );
}
}
} int main(){
int T;
#ifdef LOCAL
freopen("data.txt", "r", stdin);
freopen("out.txt", "w", stdout);
#endif
scanf("%d", &T);
while (T--){
memset(C, , sizeof(C));
work();
printf("\n");
}
return ;
}
【POJ2155】【二维树状数组】Matrix的更多相关文章
- poj2155二维树状数组
Given an N*N matrix A, whose elements are either 0 or 1. A[i, j] means the number in the i-th row an ...
- POJ2155(二维树状数组)
Matrix Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 17226 Accepted: 6461 Descripti ...
- poj2155二维树状数组区间更新
垃圾poj又交不上题了,也不知道自己写的对不对 /* 给定一个矩阵,初始化为0:两种操作 第一种把一块子矩阵里的值翻转:0->1,1->0 第二种询问某个单元的值 直接累计单元格被覆盖的次 ...
- [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 ...
- POJ2155 Matrix(二维树状数组||区间修改单点查询)
Given an N*N matrix A, whose elements are either 0 or 1. A[i, j] means the number in the i-th row an ...
- [POJ2155]Matrix(二维树状数组)
题目:http://poj.org/problem?id=2155 中文题意: 给你一个初始全部为0的n*n矩阵,有如下操作 1.C x1 y1 x2 y2 把矩形(x1,y1,x2,y2)上的数全部 ...
- POJ2155/LNSYOJ113 Matrix【二维树状数组+差分】【做题报告】
这道题是一个二维树状数组,思路十分神奇,其实还是挺水的 题目描述 给定一个N∗NN∗N的矩阵AA,其中矩阵中的元素只有0或者1,其中A[i,j]A[i,j]表示矩阵的第i行和第j列(1≤i,j≤N)( ...
- POJ 2155 Matrix (二维树状数组)
Matrix Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 17224 Accepted: 6460 Descripti ...
随机推荐
- 判断iis是否已经安装
判断iis是否已经安装? 访问http://127.0.0.1 能得到正确页面的是已经安装. 活者查看控制面板-添加删除程序-windows组件-internet信息服务(IIS)前面的没有打勾则没有 ...
- Mac 系统显示和隐藏文件的方法
1. 代码法: 显示Mac隐藏文件的命令:defaults write com.apple.finder AppleShowAllFiles -bool true 隐藏Mac隐藏文件的命令:defau ...
- ACM2075_A/B
#include<iostream> int main() { using namespace std; int i,j,count; cin>>count; while(co ...
- jsp文件中的alert等等
<script type="text/javascript"> alert("aa: ${message}") </script>
- jQuery各种效果举例
jQuery 所有jQuery详细使用说明请见:http://www.php100.com/manual/jquery/ jQuery的作用是操作浏览器html,从而达到用户的可视化效果,按照功能可分 ...
- Java中json工具对比分析
Java中几个json工具分析 1, 环境 JDK1.6+IDE(IntelliJ IDEA)+windowsXP+GBK编码 2,分析对象 jackson1.8.2 http://jackson.c ...
- 不区分大小写的in_array实现 thinkphp框架
// 不区分大小写的in_array实现 function in_array_case($value,$array) { return in_array(strtolower($value),arra ...
- SQL语法集锦三:合并列值与分拆列值
本文转载http://www.cnblogs.com/lxblog/archive/2012/09/29/2708724.html 在SQL中分拆列值和合并列值老生常谈了,从网上搜刮了一下并记录下来, ...
- sqlserver 数据行统计,秒查语句
1.传统统计方式 ...
- android tips—启动Emergency call拨号盘
Intent intent = new Intent(); intent.setAction("com.android.phone.EmergencyDialer.DIAL"); ...