Codeforces869 E. The Untended Antiquity (随机化算法)
题意:
有一个n*m的网格图,q次操作:
操作有三种:
1.将一个矩形区域加上围栏
2.将一个矩形区域的围栏拆掉
3.给定两个格子的坐标,问他们直接是否存在没有围栏的路
数据范围:n,m<=2500,q<=1e5
解法:
如果两个格子之存在没有围栏的路,那么包围他们的几层围栏一定完全相同
但是操作一共1e5次,没办法记录每个格子被哪些围栏包围,时空复杂度都不够
一种办法是对围栏赋予一个随机数t,将矩形围起来等同于矩形内每个点都加上t
这样的话判断两个格子是否被相同围栏围住只需要判断两个格子的值是否相等即可
矩形赋值容易想到二维差分前缀和,因为需要动态维护,所以上二维树状数组
code:
#include<bits/stdc++.h>
using namespace std;
typedef unsigned long long ull;
const int N=2500+5;
struct BIT{ull c[N][N];int lowbit(int i){return i&-i;}void add(int x,int y,ull t){for(int i=x;i<N;i+=lowbit(i)){for(int j=y;j<N;j+=lowbit(j)){c[i][j]+=t;}}}ull ask(int x,int y){ull ans=0;for(int i=x;i;i-=lowbit(i)){for(int j=y;j;j-=lowbit(j)){ans+=c[i][j];}}return ans;}
}T;
int n,m,q;
int seed1;
int seed2;
ull getrand(int x,int y,int xx,int yy){ull ans=x*seed1+y*seed2;ans=ans*seed1+ans*seed2+xx*seed1+yy*seed2;ans=ans*seed2+ans*seed1;return ans;
}
void cal(int x,int y,int xx,int yy,ull t){//二维差分T.add(x,y,t);T.add(xx+1,yy+1,t);T.add(x,yy+1,-t);T.add(xx+1,y,-t);
}
signed main(){seed1=rand();//随机数种子1seed2=rand();//随机数种子2scanf("%d%d%d",&n,&m,&q);while(q--){int op,x,y,xx,yy;x++,y++,xx++,yy++;scanf("%d%d%d%d%d",&op,&x,&y,&xx,&yy);if(op==1){//添加ull t=getrand(x,y,xx,yy);cal(x,y,xx,yy,t);}else if(op==2){//删除ull t=getrand(x,y,xx,yy);cal(x,y,xx,yy,-t);}else{//查询ull a=T.ask(x,y);ull b=T.ask(xx,yy);if(a==b)puts("Yes");else puts("No");}}return 0;
}
Codeforces869 E. The Untended Antiquity (随机化算法)相关推荐
- CF #439 E The Untended Antiquity
CF #439 E The Untended Antiquity 随机化·二维BIT 题解: 添加一个矩形相当于为矩形内部的每个点都打上一个"在某个矩形内"的标记. 查询的时候只要 ...
- 0046算法笔记——【随机化算法】舍伍德随机化思想解决跳跃表问题
问题描述 如果用有序链表来表示一个含有n个元素的有序集S,则在最坏情况下,搜索S中一个元素需要O(n)计算时间.提高有序链表效率的一个技巧是在有序链表的部分结点处增设附加指针以提高其搜索性能.在增设附 ...
- 随机化算法-----模拟退火
一 概念 模拟退火(Simulated Annealing,简称SA)是一种通用概率算法(随机化算法),用来在一个大的搜寻空间内找寻命题的最优解. 随机化算法是这样一种算法,在算法中使用了随机函数,且 ...
- 算法积分0042算法笔记——【随机化算法】计算π值和计算定积分
最近研究算法积分,稍微总结一下,以后继续补充: 1.盘算π值 问题描述 设有一半径为r的圆及其外切四边形.向该正方形随机地投掷n个点.设落入圆内的点数为k.由于所投入的点在正方形上平均分布,因而所投入 ...
- 随机化算法-数值随机化算法
随机数 随机数在随机化算法设计中扮演着十分重要的角色.在现实计算机上无法产生真正的随机数,因此在随机化算法中使用的随机数都是一定程度上随机的,即伪随机数. 线性同余法是产生伪随机数的最常用的方法.由线 ...
- The Untended Antiquity (二维树状数组 哈希)
题意: 3种操作 1 在左上角 (r1,c1).右下角 (r2,c2) 的矩形框上设置围墙 2 把左上角 (r1,c1).右下角 (r2,c2) 的矩形框上的围墙删掉 3 询问 (r1,c1) 能否不 ...
- CF869E The Untended Antiquity 解题报告
CF869E The Untended Antiquity 题目描述 \(\text{Adieu l'ami}\). Koyomi is helping Oshino, an acquaintance ...
- [CF869E]The Untended Antiquity
The Untended Antiquity 题解 好水的题呀 由于没有矩形相交,任意两个矩形只存在包含与相离两种关系,由于要求的是两个点是否在同一矩阵中,我们可以对其进行染色,比较两点是否被染成同一 ...
- Codeforces Round #439 (Div. 2) E. The Untended Antiquity
E. The Untended Antiquity Problem Statement Adieu l'ami. Koyomi is helping Oshino, an acquaintan ...
最新文章
- WPF DatePicker默认显示当前日期,格式化为年月日(转)
- VS如何在一个项目中添加多个包含main函数的源文件并分别调试运行
- 用万网云虚拟主机搭建一个自有域名的WordPress博客
- java面试jquery问题_20个最常见的jQuery面试问题及答案
- 安卓端gis_微图手机版下载-微图(GIS软件工具)下载v2.1.7安卓版-西西软件下载
- LintCode Memcache
- hadoop常用端口号
- layui数据表格增加自动换行后,拖动列宽固定列错乱变形
- Boom 3D全新2022版音频增强应用程序App
- APICloud入门初体验
- minio实现大文件分片上传+断点续传+预览
- Java配置环境变量教程,Java配置环境变量的作用
- ROS path [0]=/opt/ros/melodic/share/rosROS path [1]=/home/huanyu-pc/robot_ws/srcROS path [2]=/opt/
- DEV SIT UAT PET SIM PRD PROD常见环境英文缩写含义
- 9.opencv-python;cv2库;形态学;MORPH_TOPHAT礼帽与MORPH_BLACKHAT黑帽
- r语言算巢式设计方差分析_R语言之方差分析篇
- 数据手册中最小值、最大值、典型值三者之间的关系
- 3D建模过时了?什么是3D建模?
- android水果商店毕业设计,水果.鲜商城的设计与实现JSP.doc
- 竞拍系统c语言,asp宝贝儿网络拍卖商城购物系统 v11.0 GBK