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 ...
随机推荐
- CF1120 C. Compress String(SAM+DP)
有方程dp[i]=min(dp[i-1]+A,dp[j]+B):如果s[j+1,i]在s[i,j]中出现,所以我们就是要知道每个子串在s出现的第一个位置,这个可以hash实现或者sam,或者kmp实现 ...
- 软工实践第二次作业—Wordcount
Git仓库地址:https://github.com/cwabc/PersonProject-C 一.问题描述 输入一个txt文件名,以命令行参数传入,程序能够统计txt文件中的以下几个指标: 统计文 ...
- <<操作,&0xff以及|的巧妙运用(以POJ3523---The Morning after Halloween(UVa 1601)为例)
<<表示左移,如a<<1表示将a的二进制左移一位,加一个0,&0xff表示取最后8个字节,如a&0xff表示取a表示的二进制中最后8个数字组成一个新的二进制数, ...
- java中实现Comparable接口实现自定义排序
class Student implements Comparable{ String name; int gpa; @Override public int compareTo(Object arg ...
- 20165313 《Java程序设计》第七周学习总结
教材学习总结 1.下载安装MySQL数据库管理系统. 2.MySQL数据库基本操作. 3.利用JAVA程序对MySQL数据库系统进行查找,更新,添加和删除操作. 学习中的问题与解决方案 1.运行书上安 ...
- 关闭MongoDB服务的几种方法
MongoDB 提供几种关闭服务的命令,具体为以下: 一 使用 Crtl+C 关闭 [mongo@redhatB data]$ mongod --dbpath=/database/mongodb/da ...
- day 53 js学习之
---恢复内容开始--- 1.昨日作业讲解 弄一个上图一样的选择器,可以全选,可以反选,取消 <!DOCTYPE html> <html lang="zh-CN" ...
- Understanding Complex Event Processing (CEP)/ Streaming SQL Operators with WSO2 CEP (Siddhi)
转自:https://iwringer.wordpress.com/2013/08/07/understanding-complex-event-processing-cep-operators-wi ...
- Singer 学习二 使用Singer进行gitlab 2 postgres 数据转换
Singer 可以方便的进行数据的etl 处理,我们可以处理的数据可以是api 接口,也可以是数据库数据,或者 是文件 备注: 测试使用docker-compose 运行&&提供数据库 ...
- Space Shooter 学习
using UnityEngine; using System.Collections; /// <summary> /// 背景滚动 /// </summary> publi ...