PKU 2155 Matrix(裸二维树状数组)
题目大意:原题链接
题意很简单,就不赘诉了。
解题思路:
使用二维树状数组,很裸的题。
二维的写起来也很方便,两重循环。
Add(int x,int y,int val)表示(x,y)-(n,n)矩形区域被修改val次(在传入参数时val=1)
如果是要修改(x1,y1)-(x2,y2)的矩形区域。
那么可以在(x1,y1)处加1,在(x2+1,y1)处加1,在(x1,y2+1)处加1,在(x2+1,y2+1)处加1,那么总共:
(x1,y1)-(x2,y2)矩形区域被修改1次,(x2+1,y1)-(n,n)矩形区域被修改2次;
(x1,y2+1)-(n,n)矩形区域被修改2次,(x2+1,y2+1)-(n,n)矩形区域被修改4次;
画个坐标图就知道了。而修改偶数次则回到初始状态,即为0;奇数次则变换一次,即为1。
Sum(int x,int y)表示由于(1,1)-(x,y)矩形区域内的点的改变导致点(x,y)被改变的次数求和,即:
点(x,y)被改变的总次数,而查询单点就是求和,再判断奇偶即可。
注意:真没想到cin,cout差别这么大,该题如果用cin,cout输入输出的话会超时。
之前关于这几个函数Add(x1,y1,1);Add(x2+1,y1,1);Add(x1,y2+1,1);Add(x2+1,y2+1,1);
中的坐标加1始终不理解,总感觉会多修改一些地方,现在一看一目了然(后来才知道是题意理解错了)。
C操作意思是要使得矩形区域(1,1)-(3,3)的查询结果为1就行,而不是使得m[i][j]非得变成1
图一和图三分别是坐标加1和不加1的查询结果;
图二和图五分别对应着图一和图四的m[i][j]的变化过程;
图三和图六分别对应着图一和图四的Sum(i,j)的变化过程
很明显从图二可以看出,有些地方并没有真正的变成1,而查询结果却为1;
不加1时修改的范围查询结果只在矩形区域(1,1)-(2,2),而加上1时则符合要求
图一 图二 图三 图四 图五 图六

#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int n,T,m[][];
int lowbit(int x)
{
return x&(-x);
}
int Sum(int x,int y)
{
int res=;
for(int i=x;i>;i-=lowbit(i))
for(int j=y;j>;j-=lowbit(j))
res+=m[i][j];
return res;
}
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))
m[i][j]+=val;
} int main()
{
scanf("%d",&T);
while(T--){
int q;
scanf("%d%d",&n,&q);
memset(m,,sizeof(m));
char op;
int x,y,x1,y1,x2,y2;
while(q--){
getchar();
scanf("%c",&op);
if(op=='C'){
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
Add(x1,y1,);
Add(x2+,y1,);
Add(x1,y2+,);
Add(x2+,y2+,);
}
else{
scanf("%d%d",&x,&y);
if(Sum(x,y)%==) printf("0\n");
else printf("1\n");
}
}
if(T>) printf("\n");
}
}
PKU 2155 Matrix(裸二维树状数组)的更多相关文章
- POJ 2155 Matrix (二维树状数组)
Matrix Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 17224 Accepted: 6460 Descripti ...
- POJ 2155 Matrix【二维树状数组+YY(区间计数)】
题目链接:http://poj.org/problem?id=2155 Matrix Time Limit: 3000MS Memory Limit: 65536K Total Submissio ...
- POJ 2155 Matrix(二维树状数组+区间更新单点求和)
题意:给你一个n*n的全0矩阵,每次有两个操作: C x1 y1 x2 y2:将(x1,y1)到(x2,y2)的矩阵全部值求反 Q x y:求出(x,y)位置的值 树状数组标准是求单点更新区间求和,但 ...
- POJ 2155 Matrix 【二维树状数组】(二维单点查询经典题)
<题目链接> 题目大意: 给出一个初始值全为0的矩阵,对其进行两个操作. 1.给出一个子矩阵的左上角和右上角坐标,这两个坐标所代表的矩阵内0变成1,1变成0. 2.查询某个坐标的点的值. ...
- POJ 2155 Matrix (二维树状数组)题解
思路: 没想到二维树状数组和一维的比只差了一行,update单点更新,query求和 这里的函数用法和平时不一样,query直接算出来就是某点的值,怎么做到的呢? 我们在更新的时候不止更新一个点,而是 ...
- POJ 2155 Matrix(二维树状数组)
与以往不同的是,这个树状数组是二维的,仅此而已 #include <iostream> #include <cstdio> #include <cstring> # ...
- POJ 2155 Matrix【 二维树状数组 】
题意:给出两种操作,C是给出一个矩形的左上角和左下角的下标,把这个矩形里面的0变成1,1变成0,Q是询问某个点的值 看这篇论文讲得很清楚 http://wenku.baidu.com/view/1e5 ...
- [POJ2155]Matrix(二维树状数组)
题目:http://poj.org/problem?id=2155 中文题意: 给你一个初始全部为0的n*n矩阵,有如下操作 1.C x1 y1 x2 y2 把矩形(x1,y1,x2,y2)上的数全部 ...
- 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 ...
随机推荐
- Huber-Markov先验模型相关
随机概率重建-MAP算法 随机概率重建:利用贝叶斯理论作为框架,理想图像的先验知识作为约束条件进行图像重建.常用的随机概率超分辨率重建包括最大后验概率估计法(MAP)和极大似然估计法(ML). MAP ...
- VC++ 轻松实现“闪屏” SplashWnd
我们平时使用的好多软件在运行启动时都会有一个“闪屏”画面显示,一般用于标识软件的一些信息,如软件版本名称.公司等,通过查找资料发现,其实实现起来很简单,一个类就能搞定! SplashWnd.h C+ ...
- hdu 4722(记忆化搜索)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4722 思路:简单的记忆化搜索,留意一下A==0时的情况就可以了. #include<iostre ...
- JS-textarea限制输入字数
解决办法: #descrip 是textarea的id,字数小于40: $("#descrip").on('input',function(event) { if ($(" ...
- 解决 Unable to load native-hadoop library for your platform
安装hadoop启动之后总有警告:Unable to load native-hadoop library for your platform... using builtin-java classe ...
- python中的函数的执行分类
author:headsen chen date: 2018-03-21 17:42:13 notice:This article created by headsen chen himself ...
- js如何遍历并取出对象的属性名?
js如何遍历并取出对象的属性名? dataObj = {name : su,age : 26,height : 18cm }; for(var st in dataObj) {console.dir( ...
- MyBatis笔记——EhCache二级缓存
介绍 ehcache是一个分布式缓存框架. 我们系统为了提高系统并发,性能.一般对系统进行分布式部署(集群部署方式) 不使用分布缓存,缓存的数据在各各服务单独存储,不方便系统开发.所以要使用分布式缓 ...
- Python--上传文件和下载文件
#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time : 2017/12/28 13:56# @Author : Aries# @Site : # @ ...
- c#修改cpu主频
并不是真正能修改硬件,只是一个数据,能骗过部分程序检测,如英雄联盟必须达到3.0的主频才能使用录像功能,通过修改可以达到要求. 下面是代码: public enum RegValueKind { // ...