POJ2155 - Matrix

文章目录

  • 题目
  • 题解:
  • 代码

题目

给你一个二维矩阵,初始化为0,然后可以进行两次操作:
C:x,y,x1,y2 对该小矩阵内的数进行取反
Q:查询某个点是0还是1

题解:

C是区间修改,Q是单点查询,
我们将二维矩阵先简化成一维矩阵的情况,C是对一段区域[l,r]取反,我们没有必要对这段区域全部操作,我们只需要对点l和点(r+1)分别加1即可,然后查询k时,我们只需要求出k的前缀和,然后mod2即可
为什么?

如果,当k1在区间[l,r]里,k的前缀和比之前就了一个1,mod2之后就说明k1被改变了一次;当k2在[l,r]之前,没有影响;在[l,r]之后,k3的前缀和比原本多了2(l和r+1点分别多贡献一),mod 2之后就没影像了,相当于没改变
也就是当k的前缀和比原本多出奇数时,说明值比原先发生改变,否则就没有。
所以我们对于一个区间[L,R],我们只需要改变点(L)和点(R+1),
同样回到本题,二维矩阵也是这样,
左上角是x1,y1,右下角是x2,y2
a[x1][y1]+1,
a[x2+1][y2]+1
a[x1][y2+1]+1,
a[x2+1][y1+1]+1
原理和上面一样
详细看图

然后用前缀和和二维树状数组来维护,单点更改,单点查询

代码

#include<bits/stdc++.h>
using namespace std;
const int maxn=2000;
int a[maxn][maxn];
int n;
string s;
int lowbit(int x)
{return x&(-x);
}
void add(int x,int y,int w)
{for(int i=x;i<=n;i+=lowbit(x)){for(int j=y;j<=n;j+=lowbit(y)){a[i][j]+=w;}}
}
int sum(int x,int y)
{int ans=0;for(int i=x;i;i-=lowbit(i)){for(int j=y;j;j-=lowbit(j)){ans+=a[i][j];}}return ans;
}
int main()
{int t;cin>>t;int x1,y1,x2,y2;while(t--){int k;cin>>n>>k;memset(a,0,sizeof(a));for(int i=1;i<=k;i++){cin>>s;if(s[0]=='C'){cin>>x1>>y1>>x2>>y2;add(x1,y1,1);add(x2+1,y1,1);add(x1,y2+1,1);add(x2+1,y2+1,1);}else {int x,y;cin>>x>>y;cout<<sum(x,y)%2<<endl;}}}
}

POJ2155 - Matrix(二维树状数组)相关推荐

  1. poj2155(二维树状数组)

    题意:需要求翻转次数.奇数就是翻成了1,偶数还是0.所以最后的结果余2就可以了. #include<iostream> #include<algorithm> #include ...

  2. Hihocoer 1336 - Matrix Sum 二维树状数组

    题意 给我们个n*n的矩阵 有m个操作让我们 操作有两种 Add x y v对(x,y)上的元素加v Sum x1 y1 x2 y2 对(x1,y1)为左上角(x2,y2)为右下角的矩阵求和并mod ...

  3. 【CF869E】The Untended Antiquity(哈希+二维树状数组)

    当覆盖两点的最小矩形不同时,一定不可达 这样的问题不难想到经典的二维树状数组+差分来支持二维区间覆盖+查询 对于覆盖操作 我们可以差分的给这个矩阵里加上一个编号 对于操墙操作 我们可以反着减去这个编号 ...

  4. 二维树状数组 ----2021广东省赛 ----- K - Kera‘s line segment[区间转二维平面+树状数组维护前缀最小最大值]

    题目链接 题目大意: 就是一个一维的数轴上面有一堆线段用一个三元组(l,r,val)(l,r,val)(l,r,val)表示. 现在我们有两个操作: 就是往数轴上面添加线段 询问[L,R][L,R][ ...

  5. szu 寒训第二天 树状数组 二维树状数组详解,以及树状数组扩展应用【求逆序对,以及动态第k小数】

    树状数组(Binary Index Tree) 树状数组可以解决可以转化为前缀和问题的问题 这是一类用以解决动态前缀和的问题 (有点像线段树简版) 1.对于 a1 + a2 + a3 + - + an ...

  6. 【二维树状数组】See you~

    https://www.bnuoj.com/v3/contest_show.php?cid=9148#problem/F [题意] 给定一个矩阵,每个格子的初始值为1.现在可以对矩阵有四种操作: A ...

  7. POJ_1195 Mobile phones 【二维树状数组】

    题目链接:http://poj.org/problem?id=1195 纯纯的二维树状数组,不解释,仅仅须要注意一点,由于题目中的数组从0開始计算,所以维护的时候须要加1.由于树状数组的下标是不能为1 ...

  8. 洛谷1527(bzoj2738)矩阵乘法——二维树状数组+整体二分

    题目:https://www.luogu.org/problemnew/show/P1527 不难想到(?)可以用二维树状数组.但维护什么?怎么查询是难点. 因为求第k小,可以考虑记权值树状数组,把比 ...

  9. 二维树状数组 BZOJ 1452 [JSOI2009]Count

    题目链接 裸二维树状数组 #include <bits/stdc++.h>const int N = 305; struct BIT_2D {int c[105][N][N], n, m; ...

最新文章

  1. git pull出现There is no tracking information for the current branch
  2. 源同步方法与注意事项
  3. C++纯虚函数 virtual =0
  4. hdu 5055(贪心)
  5. 独家下载!2021前端热门技术解读
  6. [一天一个小知识]instanceof
  7. bootstrap Table的使用方法
  8. 锻炼产品架构思维的4个维度
  9. 整理一下var和函数function的一些小知识点
  10. 金九银十正确打开方式!快手三面面试真题
  11. 【java学习之路】(java SE篇)008.集合
  12. 预测模型——灰色模型
  13. light动名词_2015年12月英语六级语法知识:动名词
  14. win10下pyt3.7安装scrapy后cmd运行相关命令SyntaxError: invalid syntax 解决办法
  15. 双硬盘安装ubuntu
  16. 【第三方互联】4、分享至腾讯QQ、新浪微博(sina)
  17. 【面试】TCP、UDP、Socket、HTTP网络编程面试题
  18. C语言初学知识准备(Linux方面)
  19. 服务器刹车响应时间,驾驶员反应时间及制动响应时间
  20. 为什么size_t重要?为什么不直接用unigned long int 代替?以及size_t、ptrdiff_t、socklen_t数据类型

热门文章

  1. 知乎上这个程序员火了,竟是因为给老板修了一 次U盘
  2. 女儿学会走路了,是不是该教她学Python了?
  3. 【物理笑话】学过物理的人才能看懂的笑话,你能看明白几个?
  4. 有气质的人都在看什么?
  5. 【干货】人人都能看懂的LSTM
  6. java监听网络连接_Android RxJava 之网络链接监听示范
  7. 在google play开放平台上closed texting如何删除_“爷青回”!如何抢先体验《英雄联盟》手游?这份攻略送给你...
  8. cmosfixr插件怎么用_3dmax插件神器|怎么用3dmax插件神器去完成背景墙的效果图设计?...
  9. mycli mysql_MyCLI :易于使用的 MySQL/MariaDB 客户端
  10. leetcode24. 两两交换链表中的节点(思路+解析)