/*
二维树状数组+Hash
题意:
给一个地图(n,m) 三种操作:
1,在以(r1,c1)、(r2,c2)为对角的矩形四条边上添加障碍
2,消除以(r1,c1)、(r2,c2)为对角的矩形四条边上的障碍
3,判断(r1,c1)到(r2,c2)是否存在一条路径,不经过障碍利用二维树状数组进行块更新,每次添加障碍时,用一个Hash值
如果两个点之间的Hash值是相同的,说明可以有路径不经过障碍
*/
#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
#include <map>
using namespace std;
typedef long long LL;
const int mod=10037;//用于Hash
const int maxn=2505;
map<pair<pair<int,int>,pair<int,int> >,LL>mp;//矩形的Hash值
int n,m,q;
LL tree[maxn][maxn];
int t,r1,c1,r2,c2;
//二维树状数组
int lowbit(int i)
{return i&(-i);
}
void add(int l,int r,LL v)
{for(int i=l;i<=n;i+=lowbit(i)){for(int j=r;j<=m;j+=lowbit(j)){tree[i][j]+=v;}}
}
LL get(int l,int r)
{LL ans=0;for(int i=l;i>=1;i-=lowbit(i)){for(int j=r;j>=1;j-=lowbit(j)){ans+=tree[i][j];}}return ans;
}
int main()
{while(~scanf("%d%d%d",&n,&m,&q)){mp.clear();LL Hash=1;//Hash值memset(tree,0,sizeof(tree));for(int i=0;i<q;i++){scanf("%d%d%d%d%d",&t,&r1,&c1,&r2,&c2);if(t==1){Hash*=mod;//保证每次添加障碍时,Hash值都不同mp[make_pair(make_pair(r1,c1),make_pair(r2,c2))]=Hash;//记录这个Hash值//题目保证障碍没有公共点add(r1,c1,Hash);add(r2+1,c2+1,Hash);add(r1,c2+1,-Hash);add(r2+1,c1,-Hash);}else if(t==2){LL cnt=mp[make_pair(make_pair(r1,c1),make_pair(r2,c2))];add(r1,c1,-cnt);add(r2+1,c2+1,-cnt);add(r1,c2+1,cnt);add(r2+1,c1,cnt);}else if(t==3){LL ans1=get(r1,c1);//获取此时的Hash值LL ans2=get(r2,c2);if(ans1==ans2){printf("Yes\n");}else{printf("No\n");}}}}return 0;
}

codeforces869EThe Untended Antiquity(二维树状数组)相关推荐

  1. CodeForces 869E The Untended Antiquity 二维树状数组,随机hash

    CodeForces 869E 题意: n*m 的格子,有三种操作, 1.在一个矩形周围加一层障碍.2.把一个矩形周围的障碍去掉. 3.询问两个格子是否可达.     题目保证不会有矩形障碍交叉,且去 ...

  2. CF869 E. The Untended Antiquity 二位树状数组+hash

    题意 一个地图,然后三种操作  1.一个矩阵四周加上障碍  2.一个矩阵四周的障碍消除  3.问你两个点之间是否纯在一条路径不经过障碍 题解 我们可以给每一个矩阵一个hash值  然后将矩阵里面的点都 ...

  3. The Untended Antiquity (二维树状数组 哈希)

    题意: 3种操作 1 在左上角 (r1,c1).右下角 (r2,c2) 的矩形框上设置围墙 2 把左上角 (r1,c1).右下角 (r2,c2) 的矩形框上的围墙删掉 3 询问 (r1,c1) 能否不 ...

  4. Codeforces Round #439 (Div. 2) E. The Untended Antiquity 二维线段树||二维树状数组

    http://codeforces.com/contest/869/problem/E 题意:n*m的矩阵,q次操作,三种类型 类型1:给指定矩阵加上围栏 类型2:给指定矩阵去掉围栏 类型3:查询两点 ...

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

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

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

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

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

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

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

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

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

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

最新文章

  1. 一步步学敏捷开发:开篇
  2. 在Spring MVC中使用多个属性文件
  3. 合肥天鹅湖万达广场机器人_合肥租房价位及租房地理位置推荐
  4. html5 canvas气泡动画
  5. 实战经验:Oracle DG 的归档缺失修复
  6. 查看欧拉系统服务器ip,euler os 查看center进程命令
  7. 京东联合vivo针对vivo X Note推出先行者计划
  8. RDLC之自定義數據集二
  9. AcWing 674.超级2048
  10. Vieux-部分型号iPhone\iPad\iPod降级工具使用教程
  11. Word2013自动生成中英文目录
  12. cdrx8如何批量导出jpg_cdr超级伴侣批量导图v8.0 免费版
  13. cass等距离等分线段的命令键_cass线段怎么等分命令是什么
  14. AI 让已故歌手重聚,再发4首原创新歌
  15. 苏强SN系列服务器说明书,SN2000交流伺服驱动器使用手册.pdf
  16. 怎么更改苹果账户名称_苹果新品快来了,你真的学会如何找回你的Apple ID的密码了吗?...
  17. html项目的致谢词,毕业论文的致谢词范文(精选5篇)
  18. 工作室官网整站源码有后台
  19. stm32c8t6通过onenet上传gps经度与维度
  20. Python进行图片缩放

热门文章

  1. Sicily 1136 山海经 (SOJ 1136) 【Segment Tree 线段树】
  2. 推荐一些助你看透世界本质的书
  3. 《自然》杂志:面对“电车难题”,不同国家的人有不同的道德选择
  4. PX4中的二阶巴特沃斯低通滤波
  5. 解决Mysql:Incorrect string value: '\xF0\x9F\x8D\x83\xF0\x9F...' for column
  6. 如何在WPS、Word里插入高亮代码块
  7. MTP和MPO两种光纤有什么区别呢?
  8. 推广文案写作有哪些技巧,母婴用品文案内容撰写时需要注意的事项
  9. 网工学习 第十一章 网络管理 网络管理基础 网络管理协议五大标准 SNMP协议 RMON
  10. SaaS平台产品架构设计