博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CodeForces869E The Untended Antiquity
阅读量:5055 次
发布时间:2019-06-12

本文共 1446 字,大约阅读时间需要 4 分钟。

题意:一开始一个n*m的矩形(n,m<2500),q个查询(q<50000),每个查询x,x1,y1,x2,y2

x==1:增加一个矩形(矩形不会交叉) 2:删除一个矩形,3:查询(x1,y1)能否到达(x2,y2)

题解:先考虑不能直接dfs找两个点是否可达,可以判断是否在同一个矩形就可以,每一个矩形一个编号,用树状数组更新,又考虑到会出现重复的数,所以哈希一下

#include 
#define maxn 2510#define INF 0x3f3f3f3ftypedef long long ll;using namespace std;int sum[maxn][maxn];map
,int>mp;int n,m;void add(int x,int y,int d){ for(int i = x ; i <= n ; i += i&(-i)) for(int j = y ; j <= m ; j += j&(-j)){ sum[i][j] += d; }}int sum_ans(int x,int y){ int ans = 0; for(int i = x ; i >= 1 ; i -= i&(-i)) for(int j = y ; j >= 1 ; j -= j&(-j)){ ans += sum[i][j]; } return ans;}void update(int x1,int y1,int x2,int y2, int d){ add(x1,y1,d); add(x1,y2+1,-d); add(x2+1,y1,-d); add(x2+1,y2+1,d);}int main(){ srand(time(0)); int q, x, x1, x2, y1, y2, t; scanf("%d%d%d", &n, &m, &q); for(int i=1;i<=q;i++){ scanf("%d%d%d%d%d", &x, &x1, &y1, &x2, &y2); if(x == 1){ t = x1*131*131*131+y1*131*131+x2*131+y2; mp[{x1, y1, x2, y2}] = t; update(x1, y1, x2, y2, t); } else if(x == 2){ t = mp[{x1, y1, x2, y2}]; update(x1, y1, x2, y2, -t); } else{ if(sum_ans(x1, y1) == sum_ans(x2, y2)) printf("Yes\n"); else printf("No\n"); } } return 0;}

 

转载于:https://www.cnblogs.com/Noevon/p/7678326.html

你可能感兴趣的文章
Oracle OEM 配置报错: No value was set for the parameter DBCONTROL_HTTP_PORT 解决方法
查看>>
01入门
查看>>
python正则表达式
查看>>
嵌套循环连接(nested loops join)原理
查看>>
shell统计特征数量
查看>>
复习文件操作
查看>>
git使用 ——转
查看>>
C#Hashtable与Dictionary性能
查看>>
10个让你忘记 Flash 的 HTML5 应用演示
查看>>
8个Python面试必考的题目,小编也被坑过 ToT
查看>>
SQL Server 使用作业设置定时任务之一(转载)
查看>>
centos 图形界面和命令行界面切换(转载)
查看>>
Maven启用代理访问
查看>>
Primary definition
查看>>
第二阶段冲刺-01
查看>>
BZOJ1045 HAOI2008 糖果传递
查看>>
发送请求时params和data的区别
查看>>
JavaScript 克隆数组
查看>>
eggs
查看>>
一步步学习微软InfoPath2010和SP2010--第七章节--从SP列表和业务数据连接接收数据(4)--外部项目选取器和业务数据连接...
查看>>