bzoj5048: 塌陷的牧场
Description
Input
Output
塌陷的格子数和询问数都很少,可以反过来移动这些格子来计算每次新覆盖了多少位置,查询区间内未被覆盖的位置可以用zkw线段树实现,时间复杂度O(qelog(n+m)+nm)。
#include<bits/stdc++.h>
const int N=;
int n,m,e,q,mx;
int xs[N],ys[N],dc=,tr[][N][N*],ds[N*N],dp=,*t,Q[N];
bool dd[N][N];
void del(int x,int y){
if(!dd[x][y])dd[x][y]=,++dc;
}
void chk(int*t,int x){
for(int w=x;w>&&!t[w^];t[w>>=]=);
int ql=,qr=;
t[x]=,Q[++qr]=x;
while(ql!=qr){
int w=Q[++ql];
if(w>=mx)ds[dp++]=w-mx;
else{
w<<=;
if(t[w])t[w]=,Q[++qr]=w;
++w;
if(t[w])t[w]=,Q[++qr]=w;
}
}
}
void dt(int*t,int l,int r){
for(l+=mx-,r+=mx+;r-l!=;l>>=,r>>=){
if(~l&&&t[l+])chk(t,l+);
if(r&&&t[r-])chk(t,r-);
}
}
void dlr(int x,int l,int r){
if(x<||x>n)return;
if(r>m)r=m;if(l<)l=;
if(l<=r)dt(tr[][x],l,r);
for(;dp;del(x,ds[--dp]));
}
void dud(int y,int l,int r){
if(y<||y>m)return;
if(r>n)r=n;if(l<)l=;
if(l<=r)dt(tr[][y],l,r);
for(;dp;del(ds[--dp],y));
}
void init(int*t,int c){
for(int i=;i<=c;++i)t[mx+i]=;
for(int i=mx-;i;--i)t[i]=t[i<<]|t[(i<<)+];
}
int main(){
scanf("%d%d%d%d",&n,&m,&e,&q);
for(mx=;mx<=std::max(n,m)+;mx<<=);
for(int i=;i<=e;++i)scanf("%d%d",xs+i,ys+i),del(xs[i],ys[i]);
for(int i=;i<=n;++i)init(tr[][i],m);
for(int i=;i<=m;++i)init(tr[][i],n);
int lp=,rp=m+,up=,dp=n+;
while(q--){
char dir;
int d,v0=dc;
scanf(" %c%d",&dir,&d);
if(dir=='R'){//m-
for(int i=;i<=e;++i)dlr(xs[i],ys[i]-d,ys[i]),ys[i]-=d;
for(int i=;i<=n;++i)dlr(i,rp-d,rp);
lp-=d,rp-=d;
}
if(dir=='L'){//m+
for(int i=;i<=e;++i)dlr(xs[i],ys[i],ys[i]+d),ys[i]+=d;
for(int i=;i<=n;++i)dlr(i,lp,lp+d);
lp+=d,rp+=d;
}
if(dir=='D'){//n-
for(int i=;i<=e;++i)dud(ys[i],xs[i]-d,xs[i]),xs[i]-=d;
for(int i=;i<=m;++i)dud(i,dp-d,dp);
up-=d,dp-=d;
}
if(dir=='U'){//n+
for(int i=;i<=e;++i)dud(ys[i],xs[i],xs[i]+d),xs[i]+=d;
for(int i=;i<=m;++i)dud(i,up,up+d);
up+=d,dp+=d;
}
printf("%d\n",dc-v0);
}
return ;
}
bzoj5048: 塌陷的牧场的更多相关文章
- 【BZOJ 5048 塌陷的牧场】
Time Limit: 25 Sec Memory Limit: 256 MBSubmit: 77 Solved: 34[Submit][Status][Discuss] Description ...
- WOJ 39 塌陷的牧场
感觉……做克老师的题,都很神仙…… 还有去年一个人坐在家里写挂60分算法的惨痛记忆,凭借着一点点记忆重新写这道题. 感觉这并查集真的很神仙,仍然不会算最后的α的复杂度……自己想感觉无论如何都要挂个lo ...
- 外边距塌陷之clearance
在一个BFC中,垂直方向上相邻的块级盒子产生外边距塌陷,本文要说一个特殊的外边距塌陷情况,即当垂直方向上,两个块级盒子之间有个浮动元素相隔时,这个时候会产生什么样的效果呢? .outer{ overf ...
- CSS的margin塌陷(collapse)
<!DOCTYPEHTML PUBLIC"-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head&g ...
- QTableWidget详解(样式、右键菜单、表头塌陷、多选等)
在Qt的开发过程中,时常会用到表单(QTableWidget)这个控件,网上的资料不少,但是都是最基本的,有一些比较经常遇到的问题也说得不太清楚.所以,今天就在这里总结一下! 以下为个人模拟Windo ...
- 【bzoj1725】[USACO2006 Nov]Corn Fields牧场的安排
题目描述 Farmer John新买了一块长方形的牧场,这块牧场被划分成M列N行(1<=M<=12; 1<=N<=12),每一格都是一块正方形的土地.FJ打算在牧场上的某几格土 ...
- 【BZOJ1725】[Usaco2006 Nov]Corn Fields牧场的安排 状压DP
[BZOJ1725][Usaco2006 Nov]Corn Fields牧场的安排 Description Farmer John新买了一块长方形的牧场,这块牧场被划分成M列N行(1<=M< ...
- 【BZOJ】3437: 小P的牧场
题意 n个点,需要再一些点建立控制站,如果在第\(i\)个建站,贡献为\(a[i]\).假设前一个站为\(j<i\),则\([j+1, i]\)的点的贡献是\(\sum_{k=j+1}^{i} ...
- float导致父级元素塌陷的问题
利用float进行页面布局时常常会出现父级元素没有高度的塌陷问题,如以下代码: <!DOCTYPE html> <html> <head lang="en&qu ...
随机推荐
- Java SubString截取字符串
在String中有两个substring()函数,如下: 一:String.substring(int start) 参数: start:要截取位置的索引 返回: 从start开始到结束的字符串 例如 ...
- Python—集合的操作、文件的操作
1.集合的操作 2.文件的操作 1.集合的操作 定义: 1.不同元素组成,自动去重 2.无序 3.集合中的元素必须是不可变类型 1.集合的定义: >>> s1 = set('abcd ...
- PHP爬虫
使用PHP的curl扩展抓取页面数据 PHP的curl扩展是PHP支持的允许你与各种服务器使用各种类型的协议进行连接和通信的库. 本程序是抓取知乎的用户数据,要能访问用户个人页面,需要用户登录后的才能 ...
- List集合2-LinkedList
一.LinkedList集合 LinkedList集合也是List接口的实现类(没有ArrayList集合常见) 二.LinkedList集合的特点 LinkedList内部是一个链表(双向链表) L ...
- ADO.NET 中的五个主要对象
Connection:主要用来开启程序和数据库的连接 Command:主要是用来对数据库发出一些指令,. DataAdapter;主要在数据源以及DataSet之间执行数据库的传输工作 DataSet ...
- python如何实现像shell中的case功能
我们知道在shell脚本里是支持case语句,当位置参数为空时,会提示我们怎么使用脚本 那么在python怎么实现呢?也使用case吗? python里不支持case语句,但是也有实现case的方法. ...
- python类属性和类方法(类的结构、实例属性、静态方法)
类属性和类方法 目标 类的结构 类属性和实例属性 类方法和静态方法 01. 类的结构 1.1 术语 —— 实例 使用面相对象开发,第 1 步 是设计 类 使用 类名() 创建对象,创建对象 的动作有两 ...
- 翻译1-在SQL Server 2016中介绍微软R服务
在SQL Server 2016中介绍微软R服务 源自:http://www.sqlservercentral.com/articles/Microsoft/145393/ 作者:tomakatrun ...
- 使用GraphHttpClient调用Microsoft Graph接口 - POST
博客地址:http://blog.csdn.net/FoxDave 本篇接上一讲,我们继续看如何通过GraphHttpClient创建一个Office 365的组,需要使用POST请求. 为结果添加按 ...
- Fiddler常用命令
几个常用的命令行方法使用: 查找对应响应码的数据包或请求类型的数据包: 输入“=post”将选择post的数据包并用蓝色底标色 输入:=502 查找服务器返回是图片类型的请求 输入 select im ...