题目大意

给定一个$n\times m$的网格图,每次会选择一块矩形沿着网格线铺上栅栏,或者拆除之前铺的栅栏,或者询问两个格子能否不经过栅栏直接到达。

保证栅栏没有重叠或交叉,删去的栅栏删除前一定存在。

题解

考虑两个格子能互相到达,当且仅当包含它们的栅栏完全相同。考虑对每一个栅栏随机一个权值,维护覆盖每个点的所有栅栏的异或和。

询问两个点时,若两个点权值不相同,那么一定不在。否则,可以直接认为覆盖它们的栅栏集合完全相同。

由于在$MaxInt$范围内随机权值,那么一共会出现$2^30$种权值异或和,几乎已经不可能出现重合。也可以用多次随机和扩大权值范围来增大正确率。

至于矩形异或,维护一个点的权值,可以直接使用差分$+$二维树状数组。

复杂度$O(Q\log n\log m)$。

#include<bits/stdc++.h>
#define debug(x) cerr<<#x<<" = "<<x
#define sp <<"  "
#define el <<endl
#define LL long long
#define N 2020
#define M 100020
#define pii pair<int,int>
#define mp make_pair
using namespace std;
int read(){int nm=0,fh=1; char cw=getchar();for(;!isdigit(cw);cw=getchar()) if(cw=='-') fh=-fh;for(;isdigit(cw);cw=getchar()) nm=nm*10+(cw-'0');return nm*fh;
}
int n,m,nt[M],bf[M],tot,c[N][N],p[M]; map<pii,int> MP;
int rd(){return (rand()<<13)^rand();}
inline void ins(int x,int y,LL dt){for(int k1=x;k1<=n;k1=nt[k1]) for(int k2=y;k2<=m;k2=nt[k2]) c[k1][k2]^=dt;
}
inline LL qry(int x,int y){LL tt=0;for(int k1=x;k1;k1=bf[k1]) for(int k2=y;k2;k2=bf[k2]) tt^=c[k1][k2];return tt;
}
#define add(x,y,xx,yy,dt) ins(x,y,dt),ins(x,yy+1,dt),ins(xx+1,y,dt),ins(xx+1,yy+1,dt)
int main(){srand(19260817); n=read(),m=read();for(int i=1;i<=max(n,m);i++) nt[i]=i+(i&-i),bf[i]=i-(i&-i);for(int tpe,t1,t2,t3,t4,id,T=read();T;T--){tpe=read(),t1=read(),t2=read(),t3=read(),t4=read();if(tpe==1){MP[mp(t1,t2)]=++tot,p[tot]=rd(),add(t1,t2,t3,t4,p[tot]);}else if(tpe==2){id=MP[mp(t1,t2)];add(t1,t2,t3,t4,p[id]);}else{bool fg=(qry(t1,t2)==qry(t3,t4));puts(fg?"Yes":"No");}}return 0;
}

  

转载于:https://www.cnblogs.com/OYJason/p/9900550.html

NOIP模拟题 栅栏相关推荐

  1. 闵梓轩大佬のnoip模拟题D1 总结 2017/10/26

    背景 题目概括 T1 题面 分析 90分算法 满分算法 T2 题面 分析 部分分算法 满分算法 满分代码 T3 题面 分析 代码 总结 背景 这道题目是去年的金牌大佬闵梓轩在一年前出的一套noip模拟 ...

  2. NOIp模拟题 之 肮脏的牧师 (桶排序)

    闲话: 考场上看到了这一题,简直令我震惊!啊!居然还有真么简单的模拟题!良心啊! 而且,还是我 痴迷的 熟悉的游戏 --  欧气传说 炉石传说! (话说题面的那三张卡都贼 恶心 好用!都可以在前期打出 ...

  3. 一些noip模拟题一句话题解

    Problem A: 序列 Time Limit: 10 Sec  Memory Limit: 256 MB Submit: 12  Solved: 9 [Submit][Status][Web Bo ...

  4. 【noip模拟题】天神下凡(贪心)

    vijos某次模拟赛原题... 处理出每个圆的一级祖先就行了... 其实没有那么麻烦,贪心即可出解. 我们将每个圆转换成线段后按左端点小右端点大的方法排序 然后维护一个栈: 对于每一个圆i 如果栈顶右 ...

  5. NOIP模拟题——来自风平浪静的明天

    [题目描述] 冬眠了五年,光终于从梦中醒来. 千咲.要,大家都在. 隐约记得"昨天"的海船祭,爱花意外成为贡女,沉入海底. 海面冰封,却有丝丝暖流在冰面之下涌动. 此时,爱花沉睡在 ...

  6. Noip模拟题解题报告

    Pro 第一次AK. 题目链接 Sol 站军姿 算是数学题吧,求出两圆的位置关系,然后余弦定理和扇形面积什么的搞搞就行. #include<iostream> #include<cs ...

  7. noip模拟题11.5

    T1 大天使之剑 [问题描述] 小A在游戏⾥打怪.有⼀次,他⼀下⼦遇到了n个怪物. 每个怪物有一个生命值,第i个怪物的生命值是h_i.而小A除了生命值之外,还有一个属性是魔法值m. 小A和怪物们依次行 ...

  8. noip模拟题11.11 光棍节测试

    T1. tractor 题目描述 农场上有N(1 <= N <= 50,000)堆草,放在不同的地点上.FJ有一辆拖拉机,也在农场上.拖拉机和草堆都表示为二维平面上的整数坐标,坐标值在1. ...

  9. [Noip模拟题]寿司

    Description 小 c 是一名 oier.最近,他发现他的数据结构好像学傻了.因为他在刷题时碰到了一道傻逼数据结构题,强行使用了平衡树来解决,卡着时间 AC.为此,他被狠狠地嘲讽了一番.于是, ...

  10. [HZWER NOIP模拟题][杂题][防骗题]数列

    简要题意: 长度为n的数列,有m个询问,每组询问a,b,c,表示要求出最小的i满足a*(i+1)*xi^2+(b+1)*i*xi+c+i=0,为保证强制在线,实际的a=a+lastans(b,c同理) ...

最新文章

  1. JavaScript 设计模式的七大原则(未完成)
  2. 白盒测试工具 - sonar的安装、配置与使用入门手册,用sonar检查代码质量实战演示
  3. 洛谷 P3373 【模板】线段树 2(线段树区间乘、加 区间查找)
  4. B-、B树详解及模拟实现
  5. oracle+连接格式,oracle外连接符号(+)的用法
  6. python pandas serie简介及基本使用
  7. Git missing Change-Id in commit message footer解决方法
  8. Gaze Estimation笔记——data normalization
  9. 局域网中传输介质的应用分析
  10. java可选参数_Java可选
  11. 构建可网管的企业网络
  12. CSS hover 改变另外一个元素状态
  13. RecyclerView 内item点击失效
  14. [坐标纠偏] WGS84转GCJ02、BD09,GCJ02转BD09总结
  15. 安卓开发2019年终总结(写的很水,千万别打开)
  16. maven文件彻底修改名字 Java文件修改名字
  17. 学习笔记(97):R语言入门基础-pairs绘图
  18. 参数函数 matlab,MATLAB的函数参数
  19. svg配合css3动画_如何使用CSS制作节日SVG图标动画
  20. 【ELK】7. elasticsearch linux上操作es命令详解

热门文章

  1. 拓端tecdat|R语言预测期货波动率的实现:ARCH与HAR-RV与GARCH,ARFIMA模型比较
  2. pytorch-使用GPU加速模型训练
  3. AndroidStudio使用XmlPullParser解析xml文件
  4. 永久更改打开matlab时工作目录
  5. 《SpringBoot实战》笔记1
  6. matlab 矩阵动态,matlab – 如何以块为单位动态重塑矩阵?
  7. setspan字体加粗_Android 图文混排富文本编辑器实现详解
  8. pandas获取索引行数据
  9. sklearn报错 ImportError: No module named externals 问题解决
  10. linux 实时查看日志 最新最后100行 tail