当覆盖两点的最小矩形不同时,一定不可达

这样的问题不难想到经典的二维树状数组+差分来支持二维区间覆盖+查询

对于覆盖操作 我们可以差分的给这个矩阵里加上一个编号

对于操墙操作 我们可以反着减去这个编号

对于查询 就查询这两个点的值是否相同 编号的累积不影响 因为只有在同一个墙内才会累积

注意 如果只是单单的把编号从1开始标号是不够的 因为会出现1+3=2+2这类情况

需要哈希

#include<bits/stdc++.h>
#define uint unsigned int
#define N 2505
#define lowbit(x) x&(-x)
#define base 19260817
using namespace std;
template<class T>
inline void read(T &x)
{x=0; int f=1;static char ch=getchar();while((!isdigit(ch))&&ch!='-')  ch=getchar();if(ch=='-') f=-1;while(isdigit(ch))  x=x*10+ch-'0',ch=getchar();x*=f;
}
int tree[N][N],n,m,id;
inline void add(int x,int y,int z)
{for(int i=x;i<=n;i+=lowbit(i))for(int j=y;j<=m;j+=lowbit(j))tree[i][j]+=z;
}
inline int query(int x,int y)
{int ans=0;for(int i=x;i;i-=lowbit(i))for(int j=y;j;j-=lowbit(j))ans+=tree[i][j];return ans;
}
/*struct matrix
{int x1,y1,x2,y2;inline bool operator<(const matrix &a) const{if(x1 < a.x1)return 1;if(y1 < a.y1)return 1;if(x2 < a.x2)return 1;if(y2 < a.y2)return 1;return 0;}
};
map <matrix,int> M;*/
int main()
{int Q;read(n),read(m),read(Q);for(int i=1,x1,y1,x2,y2,opt;i<=Q;i++){read(opt),read(x1),read(y1),read(x2),read(y2);uint num=x1*base*base*base+x2*base*base+y1*base+y2;//当覆盖两点的最小矩形不同时,一定不可达if(opt==1){//  M[(matrix){x1,y1,x2,y2}]=++id;add(x1,y1,num);add(x1,y2+1,-num);add(x2+1,y1,-num);add(x2+1,y2+1,num);}if(opt==2){//  int num=M[(matrix){x1,y1,x2,y2}];add(x1,y1,-num);add(x1,y2+1,num);add(x2+1,y1,num);add(x2+1,y2+1,-num);}if(opt==3){if(query(x1,y1)==query(x2,y2)) puts("Yes");else puts("No");}}return 0;
}

转载于:https://www.cnblogs.com/Patrickpwq/articles/9884524.html

【CF869E】The Untended Antiquity(哈希+二维树状数组)相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. python使用matplotlib可视化3D线框图、线框图可以将数据投影到指定的三维表面上,并输出可视化程度较高的三维效果图
  2. 2.Java中String,StringBuilder以及StringBuffer的关系与区别
  3. 【HIMI转载推荐之三】基于Cocos2dx引擎UI扩展引擎包[cocos2d-x-3c]
  4. (并查集 建立关系)食物链 -- POJ-- 1182
  5. 北京君正集成电路的Newton平台--穿戴式
  6. 天地图 热力图_arcgis js 3.x使用webgl绘制热力图
  7. 互联网安全问题的起因
  8. 如何配置三层交换机创建VLAN 7
  9. GDB调试使用技巧 - 专职C++ - C++博客
  10. 协议圣经 RTSP(三)
  11. PAT-乙级-1039. 到底买不买(20)
  12. 脉冲编码调制pcm matlab,基于MATLAB的脉冲编码调制PCM
  13. React Native知识7-TabBarIOS组件
  14. 适用与IOS手机的python编辑器,让你不限空间,地点都能玩转pyhton代码 !...
  15. 商业杂志图表的经典用色
  16. 单机数据库的实现----------01数据库
  17. 无聊做做数学题系列1 - 正弦定理及三角公式
  18. 水木周平戏说中国网络黑幽默
  19. HP11(HP其他喷头也可) 喷头程序开发项目外包
  20. PTA L2-039 清点代码库

热门文章

  1. 命令行批量缩小图片尺寸
  2. 华为stk_Aloo计算机在哪里,华为STK-AL00是什么型号
  3. 未来避难所:漂浮的诺亚方舟宾馆可抵御洪流
  4. 计算机设备选型的基本原则,设备选型的概念和选型依据
  5. 使用RecyclerView实现瀑布流
  6. [算法]Floyd-Warshall算法理解
  7. 大同linux培训班,大同一对一高中辅导中心地址
  8. php获取用户访问的dns,dnsproxy in php
  9. Redis 缓存回收的7种策略volatile设置过期时间及allkeys所有数据范围内
  10. 【FPGA——工具篇】32个FPGA开源网站