bzoj5045: 打砖块
Description

Input
Output
从下到上扫描线,用链表维护当前哪些位置可以有砖块,每向上移一行,每个有砖块的连续段最右边的砖块消失,因此可以暴力模拟,维护一个表记录哪些点当前在连续段最右侧,在扫描线移动时删除这些点。由于一开始需要排序,时间复杂度为O(nlogn)。
#include<bits/stdc++.h>
const int N=1e5+,P=;
char ib[N*],*ip=ib;
int _(){
int x=,f=;
while(*ip<)*ip++=='-'?f=-:;
while(*ip>)x=x*+*ip++-;
return x*f;
}
struct pos{
int x,y;
bool operator<(const pos&w)const{return x<w.x;}
}ps[N];
int n;
struct itv{
mutable int l,r;
bool operator<(const itv&w)const{return l<w.l;}
};
int now=-2e9,cnt=;
struct node{
int x;
bool ed,in;
node*pv,*nx;
}h[P];
node*at(int x,bool nw){
int w=unsigned(x)%P;
while(h[w].ed){
if(h[w].x==x)return h+w;
w=(w+)%P;
}
if(nw)return h[w].x=x,h[w].ed=,h+w;
return ;
}
long long ans=;
node*ts[N];
int tp=;
void upd(){
ans+=cnt;
++now;
for(int i=;i<tp;++i){
if(ts[i]->nx||!ts[i]->in)ts[i--]=ts[--tp];
else{
--cnt;
ts[i]->in=;
ts[i]=ts[i]->pv;
if(!ts[i])ts[i--]=ts[--tp];
}
}
for(int i=;i<tp;++i)ts[i]->nx=;
}
void ins(int x,int y){
while(now<x&&cnt)upd();
now=x;
node*p=at(y,);
if(p->in)return;
p->in=;
p->pv=p->nx=;
++cnt;
node*pv=at(y-,),*nx=at(y+,);
if(pv&&pv->in)(p->pv=pv)->nx=p;
if(nx&&nx->in)(p->nx=nx)->pv=p;
if(!p->nx)ts[tp++]=p;
}
int main(){
fread(ib,,sizeof(ib),stdin);
n=_();
for(int i=;i<n;++i){
int x=_(),y=_();
ps[i]=(pos){x,(y-x)/};
}
std::sort(ps,ps+n);
for(int i=;i<n;++i)ins(ps[i].x,ps[i].y);
while(cnt)upd();
printf("%lld\n",ans);
return ;
}
bzoj5045: 打砖块的更多相关文章
- BZOJ5045 打砖块 2017年9月月赛 其他
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ5045 题意概括 有一堵墙. 现在挖掉某些砖.如果有相邻的某两个砖没有了,那么他们中上方的那块也没了 ...
- codevs1257 打砖块
题目描述 Description 在一个凹槽中放置了n层砖块,最上面的一层有n块砖,第二层有n-1块,--最下面一层仅有一块砖.第i层的砖块从左至右编号为1,2,--i,第i层的第j块砖有一个价值a[ ...
- [BZOJ1112][POI2008]砖块Klo
[BZOJ1112][POI2008]砖块Klo 试题描述 N柱砖,希望有连续K柱的高度是一样的. 你可以选择以下两个动作 1:从某柱砖的顶端拿一块砖出来,丢掉不要了. 2:从仓库中拿出一块砖,放到另 ...
- BZOJ 1112: [POI2008]砖块Klo
1112: [POI2008]砖块Klo Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1736 Solved: 606[Submit][Statu ...
- 【codevs1257】 打砖块
http://codevs.cn/problem/1257/ (题目链接) 题意 在等腰三角形上打砖块,总共有m发炮弹,每块砖有一个权值,求打出的最大权值 Solution 今天考试题,考场上的2个小 ...
- 洛谷P1174 打砖块
题目描述 小红很喜欢玩一个叫打砖块的游戏,这个游戏的规则如下: 在刚开始的时候,有n行*m列的砖块,小红有k发子弹.小红每次可以用一发子弹,打碎某一列当前处于这一列最下面的那块砖,并且得到相应的得分. ...
- FZU 1025 状压dp 摆砖块
云峰菌曾经提到过的黄老师过去讲课时的摆砖块 那时百度了一下题目 想了想并没有想好怎么dp 就扔了 这两天想补动态规划知识 就去FZU做专题 然后又碰到了 就认真的想并且去做了 dp思想都在代码注释里 ...
- Demon_打砖块(建造一面墙,发射子弹打砖块)
using UnityEngine; using System.Collections; public class CubeInit : MonoBehaviour { //砖块预设体 public ...
- 一个打砖块的小游戏1.0 KILL THE BLOCKS !
/******************************************** * 程序名称:MR.DUAN 的打砖块(KILL THE BLOCKS !) * 作 者:WindAutum ...
随机推荐
- 优先队列(挑程)poj 2431
每次写poj的题都很崩溃,貌似从来没有一次一发就ac的,每次都有特别多的细节需要考虑.还有就是自己写的太粗糙了,应该把每种情况都想到的,总是急着交,然后刷一页wa. 优先队列直接用stl就可以,简单实 ...
- switch语句和switch-case与if-else之间的转换
switch语句格式:switch(变量){case 常量1:语句1;break;case 常量2:语句2;break;......default:语句;break;}特点:1.根据变量的值,选择相应 ...
- java transient 知识点学习
今天看源码的时候看到这个关键字,完全没见过,不懂.好吧!学习一下. 我们都知道实现了Serilizable接口的类,便可以序列化,那么其中某些成员变量不想被序列化怎么办?就是利用transient这个 ...
- 使用uflare/smtp2http 将smtp 转转化为http 请求
uflare/smtp2http 是一个很不错的工具,我们使用这个工具,可以快速的将smtp 服务转换为http 服务 用途实际上挺多的 devops 系统 需要使用smtp的系统(测试) 基于smt ...
- phpstorm 2017激活码(方法)
JetBrains激活 JetBrains 授权服务器(License Server URL):http://idea.imsxm.com 使用方法:激活时选择License server 填入htt ...
- MEMS 硅麦资料收集
MEMS 硅麦资料收集 PCM 和 I2S 协议的 MEMS Microphone PCM 协议在蓝牙方面比较多,一般都有 PCM 的接口. MEMS Microphone 更加的省电,更方便用于语音 ...
- Windows git 初始设置
主要布署在 Linux 服务器上时,将全局设置 为提交自动转为 LF,签出不转换.git config --global core.autocrlf input(无效了,按默认即可) 设置全局用户名.
- Spring5 新特性
Spring Framework 5.0是在Spring Framework 4.0之后将近四年内一次重大的升级. 最大特点之一是响应式编程(Reactive Programming). 响应式编程核 ...
- java zip 压缩文件
zip压缩:ZipOutputStream.ZipFile.ZipInputStream 三个类的作用 一段 java zip 压缩的代码: File dir = new File("C ...
- centos 虚拟机中最小化安装,无法上网的解决方法
无法上网原因:因为最小化安装以后,centos 默认未开启网卡 解决方法进入 /etc/sysconfig/network-scripts/ifcfg-enp0s3 文件中 进入编辑模式,将 ONBO ...