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 ...
随机推荐
- MVC模式和MVP模式的区别
MVC模式: 1. MVC的所有通信都是单向的. 2. view传送指令到controller(用户也可以直接将指令传到controller). 3. controller完成业务逻辑后要求model ...
- Linux c读取任意大小文件的所有数据
代码如下,执行完之后被分配的动态内存的指针会保存到result中.由于是动态分配内存,读取内容不再使用之后注意用free 释放掉,如不明白,请多搜索以下动态内存分配的资料. #include < ...
- SQL的decode()函数
decode()函数简介: 主要作用:将查询结果翻译成其他值(即以其他形式表现出来,以下举例说明): 使用方法: Select decode(columnname,值1,翻译值1,值2,翻译值2,.. ...
- python ----元组方法以及修改细节
元组的一级元素不可修改 #元组,有序 tu = (111,"alex",(11,22),[(33,44)],True,33,44,) v = tu[3][0][0] print(v ...
- Saiku相关异常处理(十五)
Saiku大概是我的第一个持续更博的技术点,希望自己能在这条研究saiku的道路上越走越远嘻嘻 这里我们来记录一下研究saiku时遇到的异常信息,这篇博客会保持持续更新的. 1. Java heap ...
- idea2017.3最新破解方法
IntelliJ IDEA2017.3 激活 转载至:http://blog.csdn.net/zx110503/article/details/78734428 最新的IDEA激活方式 使用网上传 ...
- SpringCloud系列------Eureka-Server
一.概述: Spring Cloud针对服务注册与发现,进行了一层抽象,并提供了三种实现:Eureka , Consul , Zookeeper 本篇文章只对Eureka 进行介绍: (部分内容引用 ...
- RabbitMQ 的安装----windows环境
一.RabbitMQ在windows下的安装 RabbitMQ 它依赖于Erlang,在window上安装时,需要先安装Erlang. 首先确定你的window电脑是32位还是64位,然后下载对应版本 ...
- 2017-9-3模拟赛T2 取数(win)
题目 题解 做法1: 直接暴力枚举每个数是否被选出,计算平均数-中位数,并与当前答案进行比较.复杂度O(2^n),能过60%的数据. 做法2: 将每个数排序后枚举中位数. 首先,取奇数个数一定更优.容 ...
- Oracle(二)在 Mysql 的基础上学习 Oracle
毕竟我是先学的mysql,对数据库的一切认知都会有一个先入为主的思想在里面,如果不搞清楚其中的异同,我感觉Oracle我是学不会 了,甚至会把它们混淆.那么,不会mysql的没必要往下看了. 下边第一 ...