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");
else
printf("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;
}

Codeforces 869E. The Untended Antiquity (二维Fenwick,Hash)的更多相关文章

  1. Codeforces 869E The Untended Antiquity

    题意:给定一个网格图,三种操作:1.在(r1,c1,r2,c2)处建围墙.2.删除(r1,c1,r2,c2)处的围墙.3.询问两点是否可达 思路比较巧妙,将围墙内的点赋加一个权值,询问的时候判断两个点 ...

  2. URAL - 1486 二维字符串HASH

    题目链接:http://acm.timus.ru/problem.aspx?space=1&num=1486 题意:给定一个n*m的字符矩阵,问你是否存在两个不重合(可以有交集)的正方形矩阵完 ...

  3. 【算法系列学习】codeforces D. Mike and distribution 二维贪心

    http://codeforces.com/contest/798/problem/D http://blog.csdn.net/yasola/article/details/70477816 对于二 ...

  4. CodeForces 242E - XOR on Segment 二维线段树?

    今天练习赛的题....又是线段树的变换..拿到题我就敲了个点更新区间查询的..果断超时...然后想到了可以将每个数与合表示成不进位的二进制数..这样就可以区间进行更新了..比赛的时候写搓了..刚重写了 ...

  5. Codeforces 1080C 题解(思维+二维前缀和)

    题面 传送门 题目大意: 有一个黑白的棋盘,现在将棋盘上的一个子矩形全部染成黑色,另一个子矩形全部染成白色 求染完色后黑,白格子的总数 分析 我们可以发现,对于一个(1,1)到(x,y)的矩形,若xy ...

  6. Codeforces Round #578 (Div. 2) 二维差分 可做模板

    题意: 在n*n的矩阵中,你可以选择一个k*k的子矩阵,然后将这个子矩阵中的所有B全部变为W,问你怎么选择这个子矩阵使得最终的矩阵中某一行全是W或者某一列全是W的个数最多 题解:考虑每一行和每一列,对 ...

  7. Codeforces 798D - Mike and distribution(二维贪心、(玄学)随机排列)

    题目链接:http://codeforces.com/problemset/problem/798/D 题目大意:从长度为n的序列A和序列B中分别选出k个下表相同的数要求,设这两个序列中k个数和分别为 ...

  8. Codeforces#514D(三分,简单二维几何)

    #include<bits/stdc++.h>using namespace std;const double eps=1e-8;int n; struct node{    double ...

  9. 牛客网训练1--------矩阵 (二份+二维矩阵hash)

    不懂hash的话:https://www.cnblogs.com/ALINGMAOMAO/p/10345850.html 思路:对于一个大矩阵的每一个子矩阵都对应着一个hash值k, 当k出现2次以上 ...

随机推荐

  1. vue-slick 插件配置

    autoplay 布尔值 false 自动播放 autoplaySpeed 整数 3000 自动播放间隔 centerMode 布尔值 false 中心模式 centerPadding 字符串 ’50 ...

  2. ideaIU-2019.2.exe-安装目录和设置目录结构的说明

    一.查看安装目录结构 bin: 容器,执行文件和启动参数等 help:快捷键文档和其他帮助文档 jbr: 含有java运行环境 lib:idea 依赖的类库 license:各个插件许可 plugin ...

  3. C#UDP异步通信

    using SetingDemo.LogHelp;using SetingDemo.SingleRowDeclare;using System;using System.Collections.Gen ...

  4. 【php设计模式】桥接模式

    定义: 将抽象与实现分离,使它们可以独立变化.它是用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度. 角色: 抽象化(Abstraction)角色:定义抽象类,并包含一个对实现 ...

  5. 05 Redis-Sentinel

    一.什么是Redis-Sentinel Redis-Sentinel是redis官方推荐的高可用性解决方案当用redis作master-slave的高可用时,如果master本身宕机,redis本身或 ...

  6. Java获取近7个月的起止时间

    话不多说,直接上代码 public class Test { @org.junit.Test public void tets() { SimpleDateFormat format = new Si ...

  7. elmentUI为table中的单元格添加事件

    <el-main> <el-tabs v-model="curTab" type="card"> <!-- tab签 --> ...

  8. Python: NumPy, Pandas学习资料

    NumPy 学习资料 书籍 NumPy Cookbook_[Idris2012] NumPy Beginner's Guide,3rd_[Idris2015] Python数据分析基础教程:NumPy ...

  9. Delphi 类成员的可见性

  10. 微信小程序开发(十一)获取手机的完整详细信息

    // succ.wxml <view style='position:absolute; top:30%; left:35%;font-size:36rpx'>{{name}}:签到成功. ...