一、题面

POJ2155

二、分析

  楼教主出的题,是二维树状数组非常好的题,还结合了开关问题(开关变化的次数如果为偶数,状态不变,奇数状态相反)。

  题意就是给了一个二维的坐标平面,每个点初始值都是0,然后给一个矩形的区域,对该区域的点的状态进行反转。然后在中间插有查询,查该点的状态。

  其实,还是对反转次数的一个研究,这里为了能快速的查找一个点的反转次数,加上又是二维,且有区间修改,所以选择二维树状数组进行处理,整个二维数组记录的就是反转的次数。

  每反转一次,就对整个矩形区间进行修改,反转次数加1,最终查询的时候就是查一共反转了多少次,记得取余2,如果是偶数,就不变,是奇数,就变1。

  注意处理二维树状数组区间更新的时候,假设给的矩形对角线的点为(x1,y1),(x2,y2)。那么更新的时候是

$add(x1,y1,v) + add(x1,y2+1, -v) + add(x2+1, y1, -v)  + add(x2+1,y2+1,v)$

为什么这样,看下图,因为你如果只更新(x1,y1),那么就会更新多的区域,就要想办法减去,但是减了之后,发现又减重了一部分,所以需要又加回来。

三、AC代码

 #include <cstdio>
#include <iostream>
#include <cstring> using namespace std; const int MAXN = 1e3 + ; int BIT[MAXN][MAXN]; void add(int x, int y, int v)
{
for(; x < MAXN; x += x & -x)
{
for(int j = y; j < MAXN; j += j & -j)
{
BIT[x][j] += v;
}
}
} int sum(int x, int y)
{
int ans = ;
for(; x; x -= x & -x)
{
for(int j = y; j; j -= j & -j)
{
ans += BIT[x][j];
}
}
return ans%;
} void update(int x1, int y1, int x2, int y2, int v)
{
add(x1, y1, v);
add(x2 + , y2 + , v);
add(x1, y2 + , -v);
add(x2 + , y1, -v);
} int main()
{
//freopen("input.txt", "r", stdin);
int T;
scanf("%d", &T);
while(T)
{
int N, Q, x1, y1, x2, y2;
char c;
memset(BIT, , sizeof(BIT));
scanf("%d %d", &N, &Q);
for(int i = ; i < Q; i++)
{
getchar();
scanf("%c %d %d", &c, &x1, &y1); if(c == 'C')
{
scanf("%d %d", &x2, &y2);
update(x1, y1, x2, y2, );
}
else
{
printf("%d\n", sum(x1, y1));
}
}
if(--T)
printf("\n");
}
return ;
}

POJ_2155 Matrix 【二维树状数组】的更多相关文章

  1. [poj2155]Matrix(二维树状数组)

    Matrix Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 25004   Accepted: 9261 Descripti ...

  2. 【poj2155】Matrix(二维树状数组区间更新+单点查询)

    Description Given an N*N matrix A, whose elements are either 0 or 1. A[i, j] means the number in the ...

  3. POJ 2155 Matrix(二维树状数组,绝对具体)

    Matrix Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 20599   Accepted: 7673 Descripti ...

  4. POJ 2155:Matrix 二维树状数组

    Matrix Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 21757   Accepted: 8141 Descripti ...

  5. poj 2155 Matrix (二维树状数组)

    题意:给你一个矩阵开始全是0,然后给你两种指令,第一种:C x1,y1,x2,y2 就是将左上角为x1,y1,右下角为x2,y2,的这个矩阵内的数字全部翻转,0变1,1变0 第二种:Q x1 y1,输 ...

  6. poj----2155 Matrix(二维树状数组第二类)

    Matrix Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 16950   Accepted: 6369 Descripti ...

  7. Matrix 二维树状数组的第二类应用

    Matrix Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 17976   Accepted: 6737 Descripti ...

  8. POJ2155:Matrix(二维树状数组,经典)

    Description Given an N*N matrix A, whose elements are either 0 or 1. A[i, j] means the number in the ...

  9. Matrix (二维树状数组)

    Description Given an N*N matrix A, whose elements are either 0 or 1. A[i, j] means the number in the ...

  10. poj 2155 B - Matrix 二维树状数组

    #include<iostream> #include<string> #include<string.h> #include<cstdio> usin ...

随机推荐

  1. [C++] Template Function _ Any number of parameters

    Template Function _ Any number of parameters #include<iostream> #include<cstdarg> using ...

  2. laravel form表单提交

    控制器 中间层 中间层

  3. Go 面向对象概念

    前言: 本文是学习<<go语言程序设计>> -- 清华大学出版社(王鹏 编著) 的2014年1月第一版 做的一些笔记 , 如有侵权, 请告知笔者, 将在24小时内删除, 转载请 ...

  4. js教程系列32 :javascript-DOM节点操作

    1 DOM节点操作 1.1 创建节点 createElement() var createDiv = document.createElement("div"); 1.2 插入子节 ...

  5. OpenSSH免密码登录SSH2

    SSH2免密码登录OpenSSHhttp://blog.csdn.net/aquester/article/details/23836299 两个SSH2间免密码登录http://blog.csdn. ...

  6. php中this、self、parent解析

    概述: this:指向类当前对象的指针:self:指向类本身,一般指向类中的静态变量:parent:指向父类的指针,一般使用parent来调用父类的构造函数. 下面通过程序详细介绍: 1.this & ...

  7. linux安装memcache及memcache扩展

    一.安装libevent# wget http://www.monkey.org/~provos/libevent-2.0.12-stable.tar.gz# tar zxf libevent-2.0 ...

  8. 一些参考网站 - Reference Documentation - Website Address

    Reference Documentation - Website Address MSDN Visual Studio 2015官方文档 https://msdn.microsoft.com/zh- ...

  9. Arduino I2C + 温湿度传感器AM2321

    (2015.5.17:本日志的内容有所更新,参见<使用Arduino Wire Library读取温湿度传感器AM2321>.) AM2321是广州奥松电子生产的数字式温湿度传感器.虽是国 ...

  10. 【转】C#中使用aria2c进行下载并显示进度条

    [转自] C#中使用aria2c进行下载并显示进度条 - 云平台知识库 - 博客园https://www.cnblogs.com/littlehb/p/5782714.html 正则表达式的生成网站: ...