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 ...
随机推荐
- IDA*(以The Ratotion Game POJ--2286 UVa1343为例)
IDA*算法实质就是迭代加深搜索和A*算法的结合,通过迭代加深搜索来寻找答案,借由预估函数h()来进行估计与剪枝. 本题主框架如下: ;;maxd++) { ,maxd)) break; } 由1开始 ...
- (9)SQL的注入(致命的漏洞)
用户登陆网站的时候进行账户验证输入特殊的格式和字符会触发一个漏洞,不需要密码直接登录成功 import pymysql username = input('请输入账号: ')password = in ...
- 踩坑tomcat8.5的cookie机制
https://www.pomelolee.com/1601.html tomcat升级到8.5版本 发现登录和退出报错,报错日志为下 [http-nio-8080-exec-20] 2016 Aug ...
- ios存储图片注意
以下方法可以解决 ios不能长按图片保存到手机的问题 -webkit-touch-callout:default;
- Python——xlsxwriter模块的使用
xlsxwriter是用于制作Excel表格的 安装方法 40 wget https://pypi.python.org/packages/e4/63/e53deacc293c7fadf95b8404 ...
- linux内核编程helloworld(中级)
传入参数 [root@bogon modules]# cat first.c #include<linux/kernel.h> #include<linux/stat.h> # ...
- Scala中的Map使用例子
Map结构是一种非常常见的结构,在各种程序语言都有对应的api,由于Spark的底层语言是Scala,所以有必要来了解下Scala中的Map使用方法. (1)不可变Map特点: api不太丰富 如果是 ...
- how to use Eclipse for kernel development
http://wiki.eclipse.org/HowTo_use_the_CDT_to_navigate_Linux_kernel_source Here are some steps that I ...
- css获取样式
1)类似id.style.width:只能获取<div style="width:200px;">内联样式</div>里面style里的width,即内联样 ...
- Primitives vs Objects
这里首先我们要了解什么是primitives 和 objects 其实理解起来很简单. 如果我们懂.NET开发就会知道C#中的值类型和引用类型. primitives variables contai ...