【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 ...
随机推荐
- 【转】在VMware中安装OS X Yosemite
原文网址:http://blog.gaohaobo.com/229.html OS X(前称:Mac OS X)操作系统是由苹果公司(Apple Inc.)为其Mac系列产品开发的.基于Unix的专属 ...
- HDU --2665
Kth number Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- HDU-2509 Be the Winner
http://acm.hdu.edu.cn/showproblem.php?pid=2509 Be the Winner Time Limit: 2000/1000 MS (Java/Others) ...
- Two kinds of Quaternion SlerpImp (Unity)
using UnityEngine;using System.Collections; public class SlerpImp{ static float Dot(Quaternion a, Qu ...
- ubuntu14.04 wps字体缺失问题
字体 下载安装字体即可
- UVa 10029 hash + dp
题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- poj 1218 THE DRUNK JAILER【水题】
THE DRUNK JAILER Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 25124 Accepted: 1576 ...
- java对文件拷贝的简单操作
package fileInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNot ...
- xml学习篇(二) ----JSON 和XML对比
在比较JSON和XML之前,我们先来上一堂关于数据格式的简要历史(更准确的说,是关于XML的始祖): 早在1970年,IBM开发了一种叫Generalized Markup Language的标记语言 ...
- spring项目中监听器作用-ContextLoaderListener(转)
1 spring框架的启动入口 ContextLoaderListener 2 作用:在启动Web 容器时,自动装配Spring applicationContext.xml 的配置信息. 因为它实现 ...