题意
一个地图,然后三种操作 
1.一个矩阵四周加上障碍 
2.一个矩阵四周的障碍消除 
3.问你两个点之间是否纯在一条路径不经过障碍

题解
我们可以给每一个矩阵一个hash值 
然后将矩阵里面的点都加上这个数 
如果是撤销障碍就减去 
然后判断两个点是否连通就看一下他的数是多少 
至于怎么维护这个矩阵加上,我们可以用一个类似差分的思想,然后用树状数组维护一下 
就像下图: 
 
然后对于一个点得到他的矩阵和就好了

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<map>using namespace std;int n,m,q;
long long tr[2505][2505];
long long mod=1e9+7;int lb(int x)
{return x&(-x);
}void add(int a,int b,long long v)
{for(int i=a;i<=n;i+=lb(i)){for(int j=b;j<=m;j+=lb(j)){tr[i][j]+=v;}}
}long long get(int a,int b)
{long long ans=0;for(int i=a;i>=1;i-=lb(i)){for(int j=b;j>=1;j-=lb(j)){ans+=tr[i][j];}}return ans;
}
int main()
{while(~scanf("%d%d%d",&n,&m,&q)){memset(tr,0,sizeof(tr));map<pair<pair<int ,int>, pair<int ,int> >,long long > mp;long long id=1;while(q--){int t,a1,b1,a2,b2;scanf("%d%d%d%d%d",&t,&a1,&b1,&a2,&b2);if(t==1){id*=mod;mp[make_pair(make_pair(a1,b1),make_pair(a2,b2))]=id;add(a1,b1,id);add(a2+1,b2+1,id);add(a1,b2+1,-id);add(a2+1,b1,-id);}else if(t==2){long long tid=mp[make_pair(make_pair(a1,b1),make_pair(a2,b2))];add(a1,b1,-tid);add(a2+1,b2+1,-tid);add(a1,b2+1,tid);add(a2+1,b1,tid);}else{long long tp1=get(a1,b1);long long tp2=get(a2,b2);if(tp1==tp2)printf("Yes\n");elseprintf("No\n");}}}
}

CF869 E. The Untended Antiquity 二位树状数组+hash相关推荐

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

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

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

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

  3. codeforces869EThe Untended Antiquity(二维树状数组)

    /* 二维树状数组+Hash 题意: 给一个地图(n,m) 三种操作: 1,在以(r1,c1).(r2,c2)为对角的矩形四条边上添加障碍 2,消除以(r1,c1).(r2,c2)为对角的矩形四条边上 ...

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

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

  7. P1527 [国家集训队]矩阵乘法 整体二分 + 二维树状数组

    传送门 题意: 思路: 算是个整体二分的板子啦,不过这个是二维的矩阵,我们只需要把一位树状数组改成二维的,让后动态维护单点加,区间查询前缀和即可. //#pragma GCC optimize(2) ...

  8. 【BZOJ3132】【TYVJ1716】上帝造题的七分钟 二维树状数组

    题目大意 维护一个\(n\times m\)的矩阵,有两种操作: \(1~x_1~y_1~x_2~y_2~v\):把\((a,b),(c,d)\)为顶点的矩形区域内的所有数字加上\(v\). \(2~ ...

  9. 二维树状数组(水题) POJ1195

    前段时间遇到线段树过不了,树状数组却过了的题.(其实线段树过得了的) 回忆了下树状数组. 主要原理,还是二进制位数,每一项的和表示其为它的前((最后一位1及其后)的二进制数)和,可从二进制图来看.(用 ...

最新文章

  1. Objective C浅拷贝和深拷贝
  2. python映射类型-Python中字典映射类型的学习教程
  3. apollo 配置中心_Apollo配置中心搭建笔记
  4. 无符号定点数加法运算的VHDL描述
  5. linux 查看进程的信号,Linux 进程信号查看与控制
  6. CentOS安装nextcloud-17.0.0
  7. 使用 Spring Boot 开发邮件系统
  8. 交通行业如何做好数字化转型?| 推荐收藏
  9. 计算机攻防必学科目,网络攻防技术课程实验教学大纲doc.doc
  10. MAXScript语法及命令
  11. 《信号与系统》(吴京)部分课后习题答案与解析——第四章(PART2)
  12. FOC 电流环PI控制器出来后为什么是电压?整定参数跟电机参数有关系吗?
  13. java中CheckException和UnCheckException的区别
  14. Intel早期的CPU和现在MCU相比,表现如何?
  15. 现在学 Prolog 递归
  16. Win10系统键盘正常但不能输入
  17. sql注入数据库原理详解
  18. Python个人项目2 --------青蛙旅行项目
  19. Opus:IETF低延迟音频编解码器:API和操作手册
  20. 第四章 脑功能磁共振成像

热门文章

  1. 命令行批量缩小图片尺寸
  2. microsoft 365 E5申请过程收不到验证码的解决方案
  3. php微信分享链接带图片,微信分享链接时,怎样才能带上缩略图和简介?
  4. js和html:周岁年龄计算器
  5. 2021年保育员(中级)考试及保育员(中级)免费试题
  6. USB OVER Network的使用(共享usb端口)
  7. iOS之地图的使用和实时描绘运动轨迹
  8. 王者荣耀战区修改,安卓手机免ROOT教程王者荣耀战力查询
  9. [OpenGL]导入obj文件
  10. Java实习生常规技术面试题每日十题Java基础(五)