一、题面

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. 如何快速增加pdf书签,解除pdf限制

    一.需要的工具 福昕PDF阅读器 Foxit PDF Editor 2.2.1 build 1119 汉化版 下载地址:http://www.onlinedown.net/soft/51002.htm ...

  2. js的常用方法

    var Jade = {}; Jade.util = { addEvent: function (target, eventType, eventHandle, param) { //deal par ...

  3. Leaflet入门:添加点线面并导入GeoJSON数据|Tutorial of Leaflet: Adding Points, Lines, Polygons and Import GeoJSON File

    Web GIS系列: 1.搭建简易Web GIS网站:使用GeoServer+PostgreSQL+PostGIS+OpenLayers3 2.使用GeoServer+QGIS发布WMTS服务 3.使 ...

  4. 8、Semantic-UI之其他按钮样式

    8.1 其他按钮样式定义 示例:定义其他按钮样式 定义圆形图标按钮样式 <div class="ui circular icon button"><i class ...

  5. cxgrid列高度行宽度定义

    行高度定义 TableView->OptionView->dataRowHieght  即可设置行高度 自动调整行宽 1.选中cxgridview,在属性中找OptionsView---& ...

  6. Inno Setup 通用脚本及简要说明( 一般情况够用了)

    ;以下脚本主要完成创建开始菜单和桌面的快捷方式,目录安装. #define MyAppName "我的软件名" #define MyAppVersion "1.0&quo ...

  7. ubuntu 中安装 Redis

    1.下载安装root@21ebdf03a086:/# apt-cache search redisroot@21ebdf03a086:/# apt-get install redis-server a ...

  8. 系统禁用执行FIPS政策导致程序发生“调用的目标发生了异常”

    工具是使用AES-256-CBC加密算法 问题 最近有客户反映, 在使用我们工具时候,会出现“调用的目标发生了异常”错误, 接到反馈之后, 我们进行了很多测试,甚至得到客户系统信息和framework ...

  9. 简单几步,提升.Net Core的开发效率

    附加IIS进程调式? 以前在开发ASP.NET(MVC)项目的时候,为了加快程序的启动速度(调式),我们会选择使用IIS.先用IIS架设还在开发的项目,在需要调式的时候附加进程,而在更多时候,如果调整 ...

  10. Entity Framework异步查询和保存

    EF6开始提供了通过async和await关键字实现异步查询和保存的支持(.net 4.5及更高版本).虽然不是所有的操作都能从异步中获益,但是耗时的操作.网络或IO密集型任务中,使用异步可以提升客户 ...