Codeforces Round #439 (Div. 2) E. The Untended Antiquity
E. The Untended Antiquity
题目链接http://codeforces.com/contest/869/problem/E
解题心得:
1、1,x1,y1,x2,y2 以(x1,y1)为左上角(x2,y2)为右下角的矩形,四边建墙。
2,x1,y1,x2,y2 以(x1,y1)为左上角(x2,y2)为右下角的矩形,拆除墙(肯定存在)。
3,x1,y1,x2,y2问是否可以从(x1,y1)走到(x2,y2)(没墙阻隔)。
2、先要标记每个点的状态,将用墙围起来的部分赋予一个值,如果两个点的值相同说明在同一个墙内,或者都没有墙阻拦,但是怎么赋予一个值能够代表这个点的状态,这就要hash,让不同的围困情况有不同的状态值。
3、hash出状态值之后需要标记,遍历肯定会超时,这就需要使用树状数组,二维的树状数组,和一维用法一样。在使用树状数组的时候要注意一下边界的问题
#include<bits/stdc++.h>
using namespace std;
const int maxn = 3000;
const int _hash = 233;
typedef long long ll;
ll maps[maxn][maxn];
ll n,m,q;
ll lowbit(ll x)
{
return x&-x;
}
void updata(ll x,ll y,ll val)
{
for(ll i=x; i<=n; i+=lowbit(i))
for(ll j=y; j<=m; j+=lowbit(j))
maps[i][j] += val;
}
void updata(ll x1,ll y1,ll x2,ll y2,ll val)
{
//需要注意一下边界的问题
updata(x1,y1,val);
updata(x1,y2+1,-val);
updata(x2+1,y1,-val);
updata(x2+1,y2+1,val);
}
ll query(ll x,ll y)
{
ll ans = 0;
for(ll i=x;i;i-=lowbit(i))
for(ll j=y;j;j-=lowbit(j))
ans += maps[i][j];
return ans;
}
void query(ll x1,ll y1,ll x2,ll y2)
{
ll ans1,ans2;
ans1 = ans2 = 0;
ans1 = query(x1,y1);
ans2 = query(x2,y2);
if(ans1 == ans2)
printf("Yes\n");
else
printf("No\n");
}
int main()
{
scanf("%lld%lld%lld",&n,&m,&q);
while(q--)
{
ll mark,x1,x2,y1,y2;
scanf("%lld%lld%lld%lld%lld",&mark,&x1,&y1,&x2,&y2);
ll temp = 1;
//hash
temp = temp*_hash + x1;
temp = temp*_hash + x2;
temp = temp*_hash + y1;
temp = temp*_hash + y2;
if(mark == 2)//拆除状态是建立状态的倒数
temp = -temp;
else if(mark == 3)
{
query(x1,y1,x2,y2);
continue;
}
updata(x1,y1,x2,y2,temp);
}
}
Codeforces Round #439 (Div. 2) E. The Untended Antiquity的更多相关文章
- Codeforces Round #439 (Div. 2)【A、B、C、E】
Codeforces Round #439 (Div. 2) codeforces 869 A. The Artful Expedient 看不透( #include<cstdio> in ...
- Codeforces Round #439 (Div. 2) Problem E (Codeforces 869E) - 暴力 - 随机化 - 二维树状数组 - 差分
Adieu l'ami. Koyomi is helping Oshino, an acquaintance of his, to take care of an open space around ...
- Codeforces Round #439 (Div. 2) 题解
题目链接 Round 439 div2 就做了两道题TAT 开场看C题就不会 然后想了好久才想到. 三种颜色挑出两种算方案数其实是独立的,于是就可以乘起来了. E题想了一会有了思路,然后YY出了一种 ...
- Codeforces Round #439 (Div. 2) Problem C (Codeforces 869C) - 组合数学
— This is not playing but duty as allies of justice, Nii-chan! — Not allies but justice itself, Onii ...
- Codeforces Round #439 (Div. 2) Problem B (Codeforces 869B)
Even if the world is full of counterfeits, I still regard it as wonderful. Pile up herbs and incense ...
- Codeforces Round #439 (Div. 2) Problem A (Codeforces 869A) - 暴力
Rock... Paper! After Karen have found the deterministic winning (losing?) strategy for rock-paper-sc ...
- Codeforces Round #439 (Div. 2)
A. The Artful Expedient 题目链接:http://codeforces.com/contest/869/problem/A 题目意思:给你两个数列,各包含n个数,现在让你从上下两 ...
- 「日常训练」The Intriguing Obsession(CodeForces Round #439 Div.2 C)
2018年11月30日更新,补充了一些思考. 题意(CodeForces 869C) 三堆点,每堆一种颜色:连接的要求是同色不能相邻或距离必须至少3.问对整个图有几种连接方法,对一个数取模. 解析 要 ...
- Codeforces Round #439 (Div. 2) C. The Intriguing Obsession
C. The Intriguing Obsession 题目链接http://codeforces.com/contest/869/problem/C 解题心得: 1.由于题目中限制了两个相同 ...
随机推荐
- 简单总结ConcurrentHashMap
一.HashTable hashTable是一个线程安全的容器,是线程安全版本的HashMap.但它的底层是和HashMap一样的,只是在方法上都加上了synchronized关键字. 这样子有什么后 ...
- 怎么样去优化我们的SQL语句
1.改写in 在SQL语言中,一个查询块可以作为另一个查询块中谓词的一个操作数.因此,SQL查询可以层层嵌套.例如在一个大型分布式数据库系统中,有订单表Order.订单信息表OrderDetail,如 ...
- 开源GIS-对比GeoServer和MapServer
1 主流组合: 基于C.C++系列的:Mapserver(服务器)+QGIS(桌面软件)+PostGIS(数据库)+Openlayers(JS)/ openscale (FLex)(浏览器客户端) ...
- Autofac框架使用遇到的问题
1) 安全透明方法“Autofac.Integration.Mvc.RegistrationExtensions.RegisterControllers(Autofac.ContainerBuilde ...
- javascript 转化一个数字数组为function数组(每个function都弹出相应的数字)
javascript 转化一个数字数组为function数组(每个function都弹出相应的数字) var arrNum = [2,3,4,5,6,10,7]; var arrFun = []; f ...
- 搭建高可用mongodb集群—— 副本集
转自:http://www.lanceyan.com/tech/mongodb/mongodb_repset1.html 在上一篇文章<搭建高可用MongoDB集群(一)——配置MongoDB& ...
- 查询 request 对象的数据
在 EmpController 中调用 RequestInfoService ris = new RequestInfoService(); ris.saveRequestInfo(request); ...
- win10下vs2013为程序集新建强名称文件时“未能完成操作。拒绝访问”的解决方案
昨日,在使用vs2013开发开发一个小工具,打算给这个小工具的源代码进行保护. 在输入完成建立强名称密钥文件时,爆出了如下错误: 一开始以为是项目所在路径的权限问题,于是给项目所在路径文件夹添加了“U ...
- hihoCode r#1077 : RMQ问题再临-线段树
思路: 两种实现方法: (1)用链表(2)用数组. #include <bits/stdc++.h> using namespace std; int n, q, L, R, op, P, ...
- 使用JDK自带的工具jstack找出造成运行程序死锁的原因
Java多线程编程也是Java面试中经常考察的内容.刚接触Java多线程编程的朋友们,可能会不慎写出一些会导致死锁(deadlock)的应用出来.如何分析造成Java多线程的原因呢?很多时候我们在怀疑 ...