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 ...
随机推荐
- HttpHandler简单示例
using System.Web; namespace MyWebApp { public class MyHttpHandler : IHttpHandler { public void Proce ...
- (转)zero copy原理
转自: http://blog.csdn.net/zzz_781111/article/details/7534649 Zero Copy 简介 许多web应用都会向用户提供大量的静态内容,这意味着有 ...
- 使用webdriverwait封装查找元素方法
对于selenium原生的查找元素方法进行封装,在timeout规定时间内循环查找页面上有没有某个元素 这样封装的好处: 1.可以有效提高查找元素的效率,避免元素还没加载完就抛异常 2.相对于time ...
- 通过HttpWebRequest在后台对WebService进行调用
目录: 1 后台调用Webservice的业务需求 2 WebService支持的交互协议 3 如何配置WebService支持的协议 4 后台对WebService的调用 4.1 SOAP 1.1 ...
- 剑指 offer set 23 n 个骰子的点数
题目 把 n 个骰子扔到地上, 所有骰子朝上一面的点数之和为 s. 输入 n, 打印出 s 所有可能的值出现的概率. 思路 1. 基于递归的求解方法. 深度为 n 的 dfs, 相当于求全排列, 时间 ...
- 你真的搞懂ES6模块的导入导出规则了吗
前言 模块作为ES6规范的核心部分之一,在实际项目开发中经常会看到它的身影,那么我们是否真正了解它的相关规则呢,今天就带大家一起了解一下模块的导入导出规则 导入 ES6模块的导入(即import)大致 ...
- 【BZOJ3872】[Poi2014]Ant colony 树形DP+二分
[BZOJ3872][Poi2014]Ant colony Description 给定一棵有n个节点的树.在每个叶子节点,有g群蚂蚁要从外面进来,其中第i群有m[i]只蚂蚁.这些蚂蚁会相继进入树中, ...
- Maven开发系统
Maven的优点: 自动从互联网中获取jar包,并实现了一步构建. pom.xml的配置 依赖管理(导入对应的jar包) 通过坐标(定位到仓库中的包的位置,并将jar包导入到项目中,如果版本升级,只需 ...
- ubuntu中vi编辑器键盘错乱的问题
Ubuntu安装完成后vi编辑器键盘不能正常使用,使用下面方法解决: 编辑文件/etc/vim/vimrc.tiny,将“compatible”改成“nocompatible”非兼容模式: 并添加一句 ...
- Delphi开发的服务在Windows2003 64位注册方式。
1.在sysWoW32目录下找到cmd.exe,右键运行方式选择administrator,输入密码后.2.TrainServer.exe -install 安装服务.