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 ...
随机推荐
- 【HDOJ1018】【大数阶乘位数】【斯特林公式】
http://acm.hdu.edu.cn/showproblem.php?pid=1018 Big Number Time Limit: 2000/1000 MS (Java/Others) ...
- hdu1686 Oulipo KMP/AC自动机
The French author Georges Perec (1936–1982) once wrote a book, La disparition, without the letter 'e ...
- 走进 AQS 瞧一瞧看一看
并发中有一块很重要的东西就是AQS.接下来一周的目标就是它. 看复杂源码时,一眼望过去,这是什么?不要慌,像剥洋葱一样,一层层剥开(哥,喜欢"扒开"这个词). 参考资源: http ...
- redux笔记1
1.安装redux 使用 npm install -save redux 安装redux,注意使用-save 表示安装到依赖中: 2. 创建store文件夹,下面创建 index.js 和 re ...
- IntelliJ IDEA备忘
IntelliJ IDEA生成get/set方法的快捷键 IntelliJ IDEA生成get/set有2种方式,alt+enter.alt+insert.下面分别介绍这2种方式快速生成get与set ...
- nginx常用参数设置
1)隐藏nginx header 版本号 使用curl -I http://www.10.0.3.46 会发现server那里显示版本号 在nginx.conf的http里添加参数server_tok ...
- Centos7部署ntp服务器同步时间以及直接将本地时间同步为北京时间
一.查看配置 查看时区列表: timedatectl list-timezones|grep Asia 查看当前时间: date 查看当前设置: [root@localhost ~]# timedat ...
- Write your own Terraform provider: Part 1
转自:https://container-solutions.com/write-terraform-provider-part-1/ This is the first part of a seri ...
- laravel多条件查询(and,or嵌套查询)
原生sql select * from homework where (id between 1 and 10 or id between 50 and 70) and complete = 1 an ...
- dojo:如何显示ListBox风格的选择框
常见的选择框控件:Selelct.FilteringSelect和ComboBox都是下拉框风格,而不是ListBox风格. dojo还提供了一个dijit.form.MultiSelect控件可以解 ...