题解【POJ2155】Matrix
Description
Given an \(N \times N\) matrix \(A\), whose elements are either \(0\) or \(1\). \(A[i, j]\) means the number in the \(i\)-th row and \(j\)-th column. Initially we have \(A[i, j] = 0 (1 \leq i, j \leq N)\).
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.
C x1 y1 x2 y2\((1 \leq x1 \leq x2 \leq n, 1 \leq y1 \leq y2 \leq n)\) changes the matrix by using the rectangle whose upper-left corner is \((x1, y1)\) and lower-right corner is \((x2, y2)\).Q x y\((1 \leq x, y \leq n)\) querys \(A[x, y]\).
Input
The first line of the input is an integer \(X (X \leq 10)\) representing the number of test cases. The following X blocks each represents a test case.
The first line of each block contains two numbers \(N\) and \(T (2 \leq N \leq 1000, 1 \leq T \leq 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
For each querying output one line, which has an integer representing \(A[x, y]\).
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
POJ Monthly,Lou Tiancheng
Solution
题意简述:一个\(N \times N\)的\(01\)矩阵,和几种动态操作,包括对子矩阵\((x,y,xx,yy)\)的所有元素异或,查询某一点\((x,y)\)的元素值。
二维树状数组裸题。
异或的操作不难修改。
二维树状数组与一维树状数组不同的是:
- 一维树状数组维护的是一条链,而二维树状数组维护的却是一片区域。
- 一维树状数组更新和查找只有一重循环,而二维树状数组需要两重循环。
- 二维树状数组比一维树状数组多一维度。
经过以上分析,\(AC\)代码就不难得出了。
Code
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <cctype>
using namespace std;
inline int gi()
{
int f = 1, x = 0; char c = getchar();
while (c < '0' || c > '9') { if (c == '-') f = -1; c = getchar();}
while (c >= '0' && c <= '9') { x = x * 10 + c - '0'; c = getchar();}
return f * x;
}
int n, m, c[1003][1003], t;
bool fl = false;
inline void add(int x, int y)//二维树状数组的修改操作
{
for (int i = x; i <= n; i = i + (i & (-i)))
{
for (int j = y; j <= n; j = j + (j & (-j)))//注意两重循环
{
++c[i][j];
}
}
}
inline int getans(int x, int y)//二维树状数组的查询操作
{
int ans = 0;
for (int i = x; i; i = i - (i & (-i)))
{
for (int j = y; j; j = j - (j & (-j)))
{
ans = ans + c[i][j];//加上答案
}
}
return ans;
}
int main()
{
int t = gi();
while (t--)
{
if (!fl) fl = true;
else puts("");
n = gi(), m = gi();
memset(c, 0, sizeof(c));
while (m--)
{
char c;
cin >> c;
if (c == 'C')
{
int x = gi(), y = gi(), xx = gi(), yy = gi();
add(x, y), add(xx + 1, y), add(x, yy + 1), add(xx + 1, yy + 1);//进行插入操作
}
else
{
int x = gi(), y = gi();
printf("%d\n", getans(x, y) % 2);//输出最终答案
}
}
}
return 0;//结束
}
题解【POJ2155】Matrix的更多相关文章
- [LeetCode 题解] Spiral Matrix
前言 [LeetCode 题解]系列传送门: http://www.cnblogs.com/double-win/category/573499.html 题目链接 54. Spiral Matrix ...
- POJ2155 Matrix 【二维线段树】
题目链接 POJ2155 题解 二维线段树水题,蒟蒻本想拿来养生一下 数据结构真的是有毒啊,, TM这题卡常 动态开点线段树会TLE[也不知道为什么] 直接开个二维数组反倒能过 #include< ...
- POJ2155 Matrix 【二维树状数组】+【段更新点查询】
Matrix Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 17766 Accepted: 6674 Descripti ...
- [poj2155]Matrix(二维树状数组)
Matrix Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 25004 Accepted: 9261 Descripti ...
- [POJ2155]Matrix(二维树状数组)
题目:http://poj.org/problem?id=2155 中文题意: 给你一个初始全部为0的n*n矩阵,有如下操作 1.C x1 y1 x2 y2 把矩形(x1,y1,x2,y2)上的数全部 ...
- POJ2155:Matrix(二维树状数组,经典)
Description Given an N*N matrix A, whose elements are either 0 or 1. A[i, j] means the number in the ...
- C++题解:Matrix Power Series ——矩阵套矩阵的矩阵加速
Matrix Power Series r时间限制: 1 Sec 内存限制: 512 MB 题目描述 给定矩阵A,求矩阵S=A^1+A^2+--+A^k,输出矩阵,S矩阵中每个元都要模m. 数据范围: ...
- poj----2155 Matrix(二维树状数组第二类)
Matrix Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 16950 Accepted: 6369 Descripti ...
- 【题解】Matrix BZOJ 4128 矩阵求逆 离散对数 大步小步算法
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=4128 大水题一道 使用大步小步算法,把数字的运算换成矩阵的运算就好了 矩阵求逆?这么基础的线 ...
- 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 ...
随机推荐
- urllib模块提供的urlretrieve()函数使用
urllib模块提供的urlretrieve()函数,urlretrieve()方法直接将远程的数据下载到本地 注意:若是网站有反爬虫的话这个函数会返回 403 Forbidden 参数url:传入的 ...
- sql-labs 18-20(sqlmap注入)
这三题主要是关于HTTP头部的注入 常见的HTTP注入点产生位置为 [Referer].[X-Forwarded-For].[Cookie].[X-Real-IP].[Accept-Language] ...
- Win10如何设置休眠选项(关于睡眠、休眠、快速启动这几个伪关机功能如何设置更适合笔记本电脑?)
· Win10如何设置休眠选项(关于睡眠.休眠.快速启动这几个伪关机功能如何设置更适合笔记本电脑?) 应用场景 升级正式版win10以后,发现竟然没有休眠选项,从电源管理器里面也没有找到,有时候有些重 ...
- Android_关于自定义view的dialog有黑影的问题
跟默认选中的主题有关 在build段代码中加入这行代码 dialog.getWindow().setBackgroundDrawableResource(android.R.color.transpa ...
- git pull报错you do not have permission to pull from the repository
you do not have permission to pull from the repository解决方法 使用git进行项目的版本管理,换了台电脑,配置了账号和邮箱后,pull一个项目 ...
- 原生JS操作class 极致版
// 获取class function getClass(el) { return el.getAttribute('class') } // 设置class function setClass(el ...
- jQuery---下拉菜单案例
下拉菜单案例 <!DOCTYPE html> <html> <head lang="en"> <meta charset="UT ...
- python笔记06
python笔记06 数据类型 上个笔记内容补充 补充 列表 reverse,反转. v1 = [1,2,3111,32,13] print(v1) v1.reverse() print(v1) v1 ...
- canvas特效-文字粒子
具体的效果 https://www.ui.cn/detail/393461.html 实现类似的动效 要求: 1.文字内容可以自定义 2.粒子的运动轨迹 是曲线,返回是按照 原运动轨迹 3.粒子 堆叠 ...
- MySQL的选则字段+联表+判断+排序(order by)
MySQL的选则字段+联表+判断+排序(order by) 两个表:1.成绩单 2.查询名单 目标: 1.选中全部字段,用于输出. 2.成绩单中有很多人的成绩,第一步是希望通过联表,只查查询名单上的人 ...