codeforces869EThe Untended Antiquity(二维树状数组)
/*
二维树状数组+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(二维树状数组)相关推荐
- CodeForces 869E The Untended Antiquity 二维树状数组,随机hash
CodeForces 869E 题意: n*m 的格子,有三种操作, 1.在一个矩形周围加一层障碍.2.把一个矩形周围的障碍去掉. 3.询问两个格子是否可达. 题目保证不会有矩形障碍交叉,且去 ...
- CF869 E. The Untended Antiquity 二位树状数组+hash
题意 一个地图,然后三种操作 1.一个矩阵四周加上障碍 2.一个矩阵四周的障碍消除 3.问你两个点之间是否纯在一条路径不经过障碍 题解 我们可以给每一个矩阵一个hash值 然后将矩阵里面的点都 ...
- The Untended Antiquity (二维树状数组 哈希)
题意: 3种操作 1 在左上角 (r1,c1).右下角 (r2,c2) 的矩形框上设置围墙 2 把左上角 (r1,c1).右下角 (r2,c2) 的矩形框上的围墙删掉 3 询问 (r1,c1) 能否不 ...
- Codeforces Round #439 (Div. 2) E. The Untended Antiquity 二维线段树||二维树状数组
http://codeforces.com/contest/869/problem/E 题意:n*m的矩阵,q次操作,三种类型 类型1:给指定矩阵加上围栏 类型2:给指定矩阵去掉围栏 类型3:查询两点 ...
- 【CF869E】The Untended Antiquity(哈希+二维树状数组)
当覆盖两点的最小矩形不同时,一定不可达 这样的问题不难想到经典的二维树状数组+差分来支持二维区间覆盖+查询 对于覆盖操作 我们可以差分的给这个矩阵里加上一个编号 对于操墙操作 我们可以反着减去这个编号 ...
- 二维树状数组 ----2021广东省赛 ----- K - Kera‘s line segment[区间转二维平面+树状数组维护前缀最小最大值]
题目链接 题目大意: 就是一个一维的数轴上面有一堆线段用一个三元组(l,r,val)(l,r,val)(l,r,val)表示. 现在我们有两个操作: 就是往数轴上面添加线段 询问[L,R][L,R][ ...
- szu 寒训第二天 树状数组 二维树状数组详解,以及树状数组扩展应用【求逆序对,以及动态第k小数】
树状数组(Binary Index Tree) 树状数组可以解决可以转化为前缀和问题的问题 这是一类用以解决动态前缀和的问题 (有点像线段树简版) 1.对于 a1 + a2 + a3 + - + an ...
- 【二维树状数组】See you~
https://www.bnuoj.com/v3/contest_show.php?cid=9148#problem/F [题意] 给定一个矩阵,每个格子的初始值为1.现在可以对矩阵有四种操作: A ...
- POJ_1195 Mobile phones 【二维树状数组】
题目链接:http://poj.org/problem?id=1195 纯纯的二维树状数组,不解释,仅仅须要注意一点,由于题目中的数组从0開始计算,所以维护的时候须要加1.由于树状数组的下标是不能为1 ...
最新文章
- 一步步学敏捷开发:开篇
- 在Spring MVC中使用多个属性文件
- 合肥天鹅湖万达广场机器人_合肥租房价位及租房地理位置推荐
- html5 canvas气泡动画
- 实战经验:Oracle DG 的归档缺失修复
- 查看欧拉系统服务器ip,euler os 查看center进程命令
- 京东联合vivo针对vivo X Note推出先行者计划
- RDLC之自定義數據集二
- AcWing 674.超级2048
- Vieux-部分型号iPhone\iPad\iPod降级工具使用教程
- Word2013自动生成中英文目录
- cdrx8如何批量导出jpg_cdr超级伴侣批量导图v8.0 免费版
- cass等距离等分线段的命令键_cass线段怎么等分命令是什么
- AI 让已故歌手重聚,再发4首原创新歌
- 苏强SN系列服务器说明书,SN2000交流伺服驱动器使用手册.pdf
- 怎么更改苹果账户名称_苹果新品快来了,你真的学会如何找回你的Apple ID的密码了吗?...
- html项目的致谢词,毕业论文的致谢词范文(精选5篇)
- 工作室官网整站源码有后台
- stm32c8t6通过onenet上传gps经度与维度
- Python进行图片缩放
热门文章
- Sicily 1136 山海经 (SOJ 1136) 【Segment Tree 线段树】
- 推荐一些助你看透世界本质的书
- 《自然》杂志:面对“电车难题”,不同国家的人有不同的道德选择
- PX4中的二阶巴特沃斯低通滤波
- 解决Mysql:Incorrect string value: '\xF0\x9F\x8D\x83\xF0\x9F...' for column
- 如何在WPS、Word里插入高亮代码块
- MTP和MPO两种光纤有什么区别呢?
- 推广文案写作有哪些技巧,母婴用品文案内容撰写时需要注意的事项
- 网工学习 第十一章 网络管理 网络管理基础 网络管理协议五大标准 SNMP协议 RMON
- SaaS平台产品架构设计