BZOJ5045 打砖块 2017年9月月赛 其他
欢迎访问~原文出处——博客园-zhouzhendong
去博客园看该题解
题目传送门 - BZOJ5045
题意概括
有一堵墙。

现在挖掉某些砖。如果有相邻的某两个砖没有了,那么他们中上方的那块也没了。
比如(0,0)和(0,2)被挖掉了,那么(1,1)也没了; (1,1)没了(1,3)没了,那么(2,2)也没了。
现在挖掉n(n<=100000)块砖,问会掉多少块砖;
砖块坐标<=109
题解
我们按照纵坐标离散化。
我们把对于最低行的所有砖块改成用许多条线段不重复覆盖的形式。这个需要排序和线性处理。
每条线段可以弄掉的位置为一个以线段为底的三角形区域。
然后跳转往上到第二个纵坐标。
枚举原来处理过的线段。如果线段能打掉的三角形的顶点在当前纵坐标之上,那么我们把一个新的梯形区域记入,并构成一条当前纵坐标的线段。
如果顶点在下面,那么直接统计即可。
对于现在,有两类线段,一种是从下面继承的,一种是当前原有的。
其实没什么区别的。
直接按照对最低行的处理搞一搞就可以了。
然后循环解决。
这样的时间复杂度是O(nlogn)的。
为什么?因为我们把所有的线段看一看。我们发现,由x块砖构成的线段,最多可以演变成x条纵坐标不同的线段,那么不同的线段总数<=n。
对于每一条不同的线段,处理的均摊复杂度为O(logn);最多n条不同线段,那么O(nlogn);
具体处理还是也具体看待。
代码
#include <cstring>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <cmath>
using namespace std;
typedef long long LL;
const int N=100000+5;
int n,x[N],xz;
LL ans=0;
struct Point{
int x,y;
}p[N];
struct vec{
Point seg[N];
int z;
void clear(){
z=0;
}
void push(int a,int b){
seg[++z].x=a,seg[z].y=b;
}
}a,b;
bool cmpx(Point a,Point b){
return a.x<b.x;
}
int main(){
scanf("%d",&n);
for (int i=1;i<=n;i++)
scanf("%d%d",&p[i].x,&p[i].y),x[i]=p[i].x;
sort(p+1,p+n+1,cmpx);
sort(x+1,x+n+1);
xz=1;
for (int i=2;i<=n;i++)
if (x[i]!=x[i-1])
x[++xz]=x[i];
a.clear();
for (int pos=1,xp=1;pos<=n,xp<=xz;xp++){
b.clear();
for (int i=1;i<=a.z;i++){
int L=a.seg[i].x,R=a.seg[i].y,w=(R-L)/2,dx=x[xp]-x[xp-1];
if (w<=dx)
ans+=1LL*w*(w+1)/2;
else {
ans+=1LL*(w+w-dx+1)*dx/2;
b.push(L+dx,R-dx);
}
}
for (;p[pos].x==x[xp];pos++)
b.push(p[pos].y,p[pos].y+2);
sort(b.seg+1,b.seg+b.z+1,cmpx);
a.clear();
vec &c=a;
for (int i=1;i<=b.z;i++)
if (c.z==0||c.seg[c.z].y<b.seg[i].x)
c.push(b.seg[i].x,b.seg[i].y);
else
c.seg[c.z].y=max(c.seg[c.z].y,b.seg[i].y);
}
for (int i=1;i<=a.z;i++){
int L=a.seg[i].x,R=a.seg[i].y,w=(R-L)/2;
ans+=1LL*w*(w+1)/2;
}
printf("%lld",ans);
return 0;
}
BZOJ5045 打砖块 2017年9月月赛 其他的更多相关文章
- BZOJ5047 空间传送装置 2017年9月月赛 最短路 SPFA
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ5047 题意概括 概括??~别为难语文做一题错两题的我了…… 题解 我们发现,对于某一种装置,有c种 ...
- 猖獗的假新闻:2017年1月1日起iOS的APP必须使用HTTPS
一.假新闻如此猖獗 刚才一位老同事 打电话问:我们公司还是用的HTTP,马上就到2017年了,提交AppStore会被拒绝,怎么办? 公司里已经有很多人问过这个问题,回答一下: HTTP还是可以正常提 ...
- [转载]Ubuntu17.04(Zesty Zapus)路线图发布:2017年4月13日发布
Canonical今天公布了Ubuntu 17.04(Zesty Zapus)操作系统的发布路线图,该版本于今年10月24日上线启动,toolchain已经上传且首个daily ISO镜像已经生成.面 ...
- 最新IP地址数据库Dat格式-高性能高并发版(2017年1月)
最新IP地址数据库->Dat格式 高性能格式->qqzeng-ip.dat 国内版-20170101-Dat 版 国外版-20170101-Dat 版 ...
- 2017年1月5日 星期四 --出埃及记 Exodus 21:31
2017年1月5日 星期四 --出埃及记 Exodus 21:31 This law also applies if the bull gores a son or daughter.牛无论触了人的儿 ...
- 2017年1月4日 星期三 --出埃及记 Exodus 21:30
2017年1月4日 星期三 --出埃及记 Exodus 21:30 However, if payment is demanded of him, he may redeem his life by ...
- 2017年1月3日 星期二 --出埃及记 Exodus 21:29
2017年1月3日 星期二 --出埃及记 Exodus 21:29 If, however, the bull has had the habit of goring and the owner ha ...
- 2017年1月2日 星期一 --出埃及记 Exodus 21:28
2017年1月2日 星期一 --出埃及记 Exodus 21:28 "If a bull gores a man or a woman to death, the bull must be ...
- 2017年1月1日 星期日 --出埃及记 Exodus 21:27
2017年1月1日 星期日 --出埃及记 Exodus 21:27 And if he knocks out the tooth of a manservant or maidservant, he ...
随机推荐
- luogu P4082 [USACO17DEC]Push a Box
传送门 一个人推箱子,和之前的华容道中的棋子移动有异曲同工之妙,因为每次可以让人走到箱子的其他方向上,或者推一下箱子 所以状态可以设成\(f_{i,j,k}\),即箱子在\((i,j)\),人在\(k ...
- LOJ 3093: 洛谷 P5323: 「BJOI2019」光线
题目传送门:LOJ #3093. 题意简述: 有 \(n\) 面玻璃,第 \(i\) 面的透光率为 \(a\),反射率为 \(b\). 问把这 \(n\) 面玻璃按顺序叠在一起后,\(n\) 层玻璃的 ...
- 【转】Zabbix 3.0 从入门到精通(zabbix使用详解)
[转]Zabbix 3.0 从入门到精通(zabbix使用详解) 第1章 zabbix监控 1.1 为什么要监控 在需要的时刻,提前提醒我们服务器出问题了 当出问题之后,可以找到问题的根源 网站/ ...
- EB-GAN系(Energy-based GAN)
学习总结于国立台湾大学 :李宏毅老师 EB-GAN: Energy-based Generative Adversarial Network MA-GAN:MAGAN: Margin Adaptati ...
- ERROR 1067 (42000): Invalid default value for 'created_time'【转】
执行表增加字段语句报错 mysql> ALTER TABLE ha_question ADD COLUMN question_number INT; ERROR (): Invalid defa ...
- ES系列九、ES优化聚合查询之深度优先和广度优先
1.优化聚合查询示例 假设我们现在有一些关于电影的数据集,每条数据里面会有一个数组类型的字段存储表演该电影的所有演员的名字. { "actors" : [ "Fred J ...
- Python3学习笔记18-访问限制
在Class内部,可以有属性和方法,而外部代码可以通过直接调用实例变量的方法来操作数据,这样,就隐藏了内部的复杂逻辑. 但是,从Student类的定义来看,外部代码还是可以自由地修改一个实例的name ...
- 【转】C/C++内存泄漏及检测
“该死系统存在内存泄漏问题”,项目中由于各方面因素,总是有人抱怨存在内存泄漏,系统长时间运行之后,可用内存越来越少,甚至导致了某些服务失败.内存泄漏是最难发现的常见错误之一,因为除非用完内存或调用ma ...
- 整理一下odoo10在windows系统下部署的流程
odoo10环境搭建 所需依赖: Python3.5 odoo10.0 Node.js PostgreSQL 9.5 PyCharm 专业版 1.首先先安装好Python3.5,并设置好环境变量 2. ...
- WampServer配置
本机php环境搭建教程:windows环境下wampserver的配置教程--超级详细 对于初做PHP网站的朋友来说,第一步肯定是希望在自己电脑是搭建PHP环境,省去空间和上传的麻烦!但搭建环境也不是 ...