<题目链接>

题目大意:

给出一个初始值全为0的矩阵,对其进行两个操作。

1.给出一个子矩阵的左上角和右上角坐标,这两个坐标所代表的矩阵内0变成1,1变成0。

2.查询某个坐标的点的值。

解题分析:

二维树状数组单点查询经典题。首先本题可以先从一维的情况推广,假设要使区间内[L,R]中所有的数字异或,我们应该在L处+1,并且在R+1处+1,单点查询的时候,直接查询这个点的前缀%2的值即可。因为,我们要明确,更新操作只能对[L,R]中的元素起作用,而不能影响其他区间的元素。所以,对于那些小于L的元素,由于是以前缀%2代表该点的值,所以L和R+1对这些元素没有影响,符合条件;其次,对于[L,R]中的所有元素来说,因为L+1,所以他们所有元素前缀之均进行+1操作,也符合题意;而对于那些大于R的元素来说,因为L和R+1均进行+1操作,所以对于这些元素来说,他们前缀%2的值仍然没有改变,也符合题意。所以可以知道,这种方法能够巧妙的解决区间更新和单点查询的问题。然后剩下的就是将这种思想推广到二维了,具体实现见代码。

 #include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 1e3+;
int n,q,tr[N][N];
inline int lowbit(int x){return x&(-x);}
void add(int x,int y,int val){
for(int i=x;i<=n;i+=lowbit(i))
for(int j=y;j<=n;j+=lowbit(j))
tr[i][j]+=val;
}
int sum(int x,int y){
int ans=;
for(int i=x;i>;i-=lowbit(i))
for(int j=y;j>;j-=lowbit(j))
ans+=tr[i][j];
return ans;
}
int main(){
int T;scanf("%d",&T);while(T--){
scanf("%d%d",&n,&q);
memset(tr,,sizeof(tr));
int x1,y1,x2,y2;
char op[];
while(q--){
scanf("%s",op);
if(op[] == 'C'){
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
add(x1,y1,); //对于矩阵中的点来说,它们点数的变化其实只需要在x1,y1处+1即可
add(x2+,y1,); //但是对矩阵外的点来说,必须要在这三个地方加+1才能对其它位置不造成干扰
add(x1,y2+,);
add(x2+,y2+,);
}else{
scanf("%d%d",&x1,&y1);
if(sum(x1,y1)% == )puts("");
else puts("");
}
}
if(T)puts("");
}
}

2018-12-11

POJ 2155 Matrix 【二维树状数组】(二维单点查询经典题)的更多相关文章

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

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

  2. 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 ...

  3. POJ-2155 Matrix---二维树状数组+区域更新单点查询

    题目链接: https://vjudge.net/problem/POJ-2155 题目大意: 给一个n*n的01矩阵,然后有两种操作(m次)C x1 y1 x2 y2是把这个小矩形内所有数字异或一遍 ...

  4. hdu-3584 Cube---三维树状数组+区域更新单点查询

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3584 题目大意: 给定一个N*N*N多维数据集A,其元素是0或是1.A[i,j,k]表示集合中第 i ...

  5. POJ 2155 Matrix(二维树状数组+区间更新单点求和)

    题意:给你一个n*n的全0矩阵,每次有两个操作: C x1 y1 x2 y2:将(x1,y1)到(x2,y2)的矩阵全部值求反 Q x y:求出(x,y)位置的值 树状数组标准是求单点更新区间求和,但 ...

  6. HDU 4031 Attack(线段树/树状数组区间更新单点查询+暴力)

    Attack Time Limit: 5000/3000 MS (Java/Others)    Memory Limit: 65768/65768 K (Java/Others) Total Sub ...

  7. NBOJv2 1050 Just Go(线段树/树状数组区间更新单点查询)

    Problem 1050: Just Go Time Limits:  3000 MS   Memory Limits:  65536 KB 64-bit interger IO format:  % ...

  8. hdu1556 树状数组区间更新单点查询板子

    就是裸的区间更新: 相对于直观的线段树的区间更新,树状数组的区间更新原理不太相同:由于数组中的一个结点控制的是一块区间,当遇到更新[l,r]时,先将所有能控制到 l 的结点给更新了,这样一来就是一下子 ...

  9. hdu3966 树链剖分点权模板+线段树区间更新/树状数组区间更新单点查询

    点权树的模板题,另外发现树状数组也是可以区间更新的.. 注意在对链进行操作时方向不要搞错 线段树版本 #include<bits/stdc++.h> using namespace std ...

  10. 【树状数组区间修改单点查询】HDU 4031 Attack

    http://acm.hdu.edu.cn/showproblem.php?pid=4031 [题意] 有一个长为n的长城,进行q次操作,d为防护罩的冷却时间,Attack表示区间a-b的墙将在1秒后 ...

随机推荐

  1. oracle 11g完全彻底的卸载

    1.关闭oracle所有的服务.可以在windows的服务管理器中关闭: 2.打开注册表:regedit 打开路径: <找注册表 :开始->运行->regedit>  HKEY ...

  2. 银联支付Java开发

    注:原来来源于: <  银联支付Java开发  > 银联的demo写的不错,基本上可以直接使用. 首先是对acp_sdk.properties的内容修改,注意这个文件的文件名不能进行修改. ...

  3. Swift 中 insetBy(dx: CGFloat, dy: CGFloat) -> CGRect 用法详解

    insetBy(dx: CGFloat, dy: CGFloat) -> CGRect 点击头文件进去 可以发现它是返回的一个CGRect insetBy方法是CGRect 的一个方法 dx后面 ...

  4. 【深度学习】吴恩达网易公开课练习(class1 week4)

    概要 class1 week3的任务是实现单隐层的神经网络代码,而本次任务是实现有L层的多层深度全连接神经网络.关键点跟class3的基本相同,算清各个参数的维度即可. 关键变量: m: 训练样本数量 ...

  5. python网络爬虫笔记(八)

    一.pthon 序列化json格式 1.将python内置对象转换成json 模块,dumps()方法返回的是一个str,内容是标准的JSON,dump()方法可以直接吧JSON写入一个file-li ...

  6. 该问题是需要导包!!!需要pom中添加依赖The absolute uri: http://java.sun.com/jsp/jstl/core cannot be resolved in either web.xml or the jar files deployed with this application

    <!-- https://mvnrepository.com/artifact/org.apache.taglibs/taglibs-standard-impl --><depend ...

  7. Ajax增删改查-----------查

    查询所有 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF- ...

  8. win10ssh连接ubuntu服务器并本地绘图

    update @ 2018-11-07 00:36:38 用xrdp+tigervnc等的组合,可以使用原生unity桌面.具体教程见ubuntu日常使用指南 工具准备 win10上: xshell, ...

  9. Asp.Net MVC Ajax轮训解决Session失效时间

    这种方法不是太好,对服务器得压力大,由于系统是内部人员使用,业务有比较复杂,所以有些值得需要Session去保存,但是,Session有失效时间. 代码如下: $(function () { func ...

  10. MyBatis - 6.Spring整合MyBatis

    1.查看不同MyBatis版本整合Spring时使用的适配包: http://www.mybatis.org/spring/ 2.下载整合适配包 https://github.com/mybatis/ ...