一、题面

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. code1047 邮票面值设计

    dfs+dp dfs枚举每种情况,每层递归确定第k个数i:i = a[k-1]+1 to a[k-1]*n+1 当枚举完一个序列时,使用check()测试它能达到的max 使用dp.设dp[i]为凑成 ...

  2. smarty 使用php函数

    strtotime() time() <{if strtotime($activity.start_time) gt time()}> <a href="?action=d ...

  3. btrfs的精简总结版

    Btrfs 也有一个重要的缺点,当 BTree 中某个节点出现错误时,文件系统将失去该节点之下的所有的文件信息.而 ext2/3 却避免了这种被称为”错误扩散”的问题. 扩展性:extent.B-Tr ...

  4. SSL技术白皮书

    首页产品技术操作系统ComwareV5安全和VPN SSL技术白皮书 下载 收藏 打印 推荐 摘自:http://www.h3c.com/cn/d_200812/622834_30003_0.htm# ...

  5. response乱码和request乱码

    response乱码 一.浏览器乱码 原因是:浏览器显示编码和文件的数据编码不一致 浏览器显示编码  response.setCharacterEncoding("utf-8"); ...

  6. 我为什么要翻译ES6官方文档

    ES6出来很久了,现在网上也有很多教程,其中以阮一峰老师的教程最为经典.大家通过学习阮老师的教程肯定能学懂ES6最新的技术. ES6官方文档是一个规范,各浏览器在实现ES6的具体API时都会遵循它.我 ...

  7. C# SendKeys用法

    功能:将一个或多个按键消息发送到活动窗口,就如同在键盘上进行输入一样. 语法:SendKeys.Send(string keys);SendKeys.SendWait(string keys); 说明 ...

  8. react+webpack基础学习配置

    最近学习react,公司的项目是使用create-react-app来搭建的,而我想重新使用node+mysql+react来搭建一个新的博客. 今天尝试从零开始搭建一个webpack+react项目 ...

  9. unittest测试框架详谈及实操(五)

    测试报告——生成HTML格式的测试报告 前面的实例输出的所有测试结果都是以命令行日志的方式展示,不止于难看,但也不适合直接把那样的测试结果截图发给相关人员,尤其是领导.这时需要更加友好的测试结果,既能 ...

  10. static 静态类

    C# 编译器对静态类进行了如下限制. 1. 静态类必须直接从System.Object派生,从其他任何基类生都没有意义,继承只适用于对象,而你不能创建静态类的实例. 2. 静态类不能实现任何接口,这是 ...