Codeforces 869E. The Untended Antiquity

题意:

在一张mxn的格子纸上,进行q次操作:
1,指定一个矩形将它用栅栏围起来。
2,撤掉一个已有的栅栏。
3,询问指定两点之间是否连通(即能否从其中一点不翻越栅栏走到另一点)

思路:

对于操作1,将给定的矩形哈希成一个数(可对点坐标进行进制哈希),对整个矩形所覆盖的点都累加上这个数;
对于操作2,则逆着把操作1的影响抵消掉;
对于操作3,看一下两点的值是否相同(相同表示他们被相同的矩形们所覆盖)。
至于每次矩形内的所有点的修改操作以及单点查值,使用二维树状数组来维护,用到了差分思想,维护的是差分数组,则单点查询即求差分数组的前缀和。具体可见代码,在图上画一画,不难理解

代码:

#include<bits/stdc++.h>
#define de(x) cout<<#x<<" = "<<x<<"\n"
#define dd(x) cout<<#x<<" = "<<x<<" "
#define sz(x) int(x.size())
#define All(x) x.begin(),x.end()
#define fi first
#define se second
#define pb push_back
#define mp make_pair
using namespace std;
typedef long long ll;
typedef long double ld;
typedef pair<int,int> P;
typedef priority_queue<int> BQ;
typedef priority_queue<int,vector<int>,greater<int> > SQ;
const int maxn=3e3+10,INF=0x3f3f3f3f;
ll fw[maxn][maxn];
void add(int x,int y,ll c)
{for (int i=x;i<maxn;i+=i&-i)for (int j=y;j<maxn;j+=j&-j)fw[i][j]+=c;
}
ll qry(int x,int y)
{ll res=0;for (int i=x;i;i-=i&-i)for (int j=y;j;j-=j&-j)res+=fw[i][j];return res;
}
ll seed=2333;
inline ll Hash(int a,int b,int c,int d)
{return a*seed*seed*seed+b*seed*seed+c*seed+d;
}
int main()
{int n,m,q;cin>>n>>m>>q;for (int i=0;i<q;++i){int op,x1,y1,x2,y2;scanf("%d%d%d%d%d",&op,&x1,&y1,&x2,&y2);if (op==3){if (qry(x1,y1)==qry(x2,y2))printf("Yes\n");elseprintf("No\n");}else{ll hs=Hash(x1,y1,x2,y2);if (op==2)hs=-hs;add(x1,y1,hs);add(x2+1,y2+1,hs);add(x1,y2+1,-hs);add(x2+1,y1,-hs);}}return 0;
}

转载于:https://www.cnblogs.com/orangee/p/9992308.html

Codeforces 869E. The Untended Antiquity (二维Fenwick,Hash)相关推荐

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

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

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

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

  3. Codeforces Round #439 (Div. 2) E. The Untended Antiquity(二维BIT)

    题意:在 n×m 的二维图上,有三种操作: 1 r1 c1 r2 c2 表示沿着 (r1, c1, r2, c2) 所表示的矩形的外边框建围墙.(其中 (r1, c1) 为矩形左上角,(r2, c2) ...

  4. codeforces 869E The Untended Antiquity

    http://www.elijahqi.win/archives/1159 Adieu l'ami. Koyomi is helping Oshino, an acquaintance of his, ...

  5. CodeForces - 467C George and Job(二维dp)

    题目链接:点击查看 题目大意:给出n个数,现在要从中选取k段长度为m的不相交的子数列,问如何选择能使得覆盖的数之和最大 题目分析:读完题之和就感觉是个dp题,但不会呀,去看了题解才会的.. 因为要选取 ...

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

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

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

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

  8. CF869E The Untended Antiquity(二维数状数组+差分+hash)

    考虑什么情况会不可达,当覆盖两点的最小矩形不同时,一定不可达.因此我们需要快速的知道覆盖一个点的最小矩形是哪个.我们考虑每次把一个矩形染色,那么复杂度是不可接受的.联想到我们一维做区间加法,单点查询时 ...

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

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

最新文章

  1. GET_GLOBALS_FROM_SLVC_FULLSCR
  2. 短信自动服务器 同步上传发送,Flyme里这几项逆天的云服务,你真的全用过?
  3. pandas.errors.ParserError: Error tokenizing data. C error: EOF inside string starting at line xxx
  4. 如何查看 MySQL 数据库的引擎
  5. Java图书管理系统练习程序(六)
  6. 双代号网络图节点时间参数_双代号网络图的绘制与6个时间参数的计算,一篇全学会!...
  7. Atitit 提取sfit特征点,并绘制到原图上
  8. CurvySplines03(模板提升工作效率)
  9. 如何更换python版本
  10. 使用ArcGIS软件进行投影变换和坐标校正
  11. php漂浮广告代码,js 居中漂浮广告_广告代码
  12. Mac系统快捷键大全
  13. salt常用命令、模块、执行
  14. Figma#5:文字
  15. 我的日记本开发手记(4)—— UI效果图
  16. 习语言(c语言)轻松入门教程
  17. 塔石Lora181 modbus读取威纶通寄存器
  18. 太阳高度角计算题_太阳高度角的计算与应用答题.ppt
  19. 【MySQL】mysql | linux | 解决mysql cpu | cpu飙升 | cpu100% cpu占用过高
  20. 物理cpu数和cpu核数和逻辑cpu数和vcpu区别

热门文章

  1. 认识异或运算的本质与基本规律,0^x=x,x异或x=0,有交换律,结合律,与顺序无关
  2. c++ 输入一个日期,计算出该日期是这一年中的第几天(switch语句)
  3. 图片怎么缩小尺寸比例不变?
  4. android 手机调试链接不上,解决android 连接真机调试连接不了的问题
  5. aptx与ldac音质区别_ldac_aptx和aptx hd功能介绍及区别介绍
  6. oj 2143 图结构练习——最短路径的几种算法
  7. Android用自定义View画小猪佩奇
  8. 【数字图像处理】图像几何变换之 图像的极坐标变化展开鱼眼图
  9. 叉车AGV车载系统模块详解
  10. linux vim命令翻页,详解Vim编辑器翻页控制命令