BZOJ [HAOI2011]防线修建(动态凸包)
听说有一种很高端的东西叫动态凸包维护dp就像学一下,不过介于本人还不会动态凸包就去学了下,还是挺神奇的说,维护上下凸包的写法虽然打得有点多不过也只是维护复制黏贴的事情而已罢了。
先说下动态凸包怎么写吧,搞棵平衡树存上下凸壳然后每次插入一个点就往他左右维护看是否满足凸性否则就弹出,就是这么简单
这道题就是删点然后询问凸壳,那么离线反着做就行了
出题人还是挺良心的直接让你维护上凸壳就行了,还不用管边界条件
用set打了一下,比较慢但还是挺好打的= =
换新blog挺多功能得试试的,现在想搞个像HZWER的那个球还有一个虾米等有时间试试(当然还有头像!!!)
好了不多说了发完睡觉了= =
CODE:
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<set>
#include<cmath>
using namespace std;
typedef pair<int,int> ii;
typedef set<ii>::iterator iter;
#define fi first
#define se second
#define sqr(x) ((x)*(x))
inline double dist(ii u,ii v) {return sqrt(sqr(u.fi-v.fi)+sqr(u.se-v.se));}
inline int cross(ii x,ii y,ii z) {
return (y.fi-x.fi)*(z.se-x.se)-(y.se-x.se)*(z.fi-x.fi);
}
set<ii> gap;
#define maxn 201000
int a[maxn][],c[maxn][];
bool b[maxn];
double sum,ans[maxn];
inline void del(iter x){
iter u=x,v=x;
u--,v++;
sum-=dist(*u,*x)+dist(*x,*v);
sum+=dist(*u,*v);
gap.erase(x);
}
inline void ins(ii x){
iter it=gap.upper_bound(x);
--it;
iter v=it,u;++v;
if (cross(*it,x,*v)>=) return;
gap.insert(x);
it=gap.find(x);
v=it,u=it;
--u,++v;
sum+=dist(*u,*it)+dist(*it,*v);
sum-=dist(*u,*v);
for (iter v=it,u;;v=it){
++v;u=v;++v;
if (v==gap.end()) break;
if (cross(*it,*u,*v)<) break;
del(u);
}
for (iter v=it,u;;v=it){
--v;
if (v==gap.begin()) break;
u=v;--v;
if (cross(*v,*u,*it)<) break;
del(u);
}
}
int main(){
int n,m,q;
scanf("%d%d%d",&n,&a[][],&a[][]);
scanf("%d",&m);
for (int i=;i<=m;i++) scanf("%d%d",a[i],a[i]+);
scanf("%d",&q);
for (int i=;i<=q;i++) {
scanf("%d",c[i]);
if (c[i][]==) scanf("%d",c[i]+),b[c[i][]]=;
}
gap.insert(ii(,));
gap.insert(ii(n,));
sum=n;
for (int i=;i<=m;i++) if (!b[i]) ins(ii(a[i][],a[i][]));
for (int i=q;i;i--) {
if (c[i][]==) ins(ii(a[c[i][]][],a[c[i][]][]));
else ans[i]=sum;
}
for (int i=;i<=q;i++)
if (ans[i]) printf("%.2lf\n",ans[i]);
return ;
}
BZOJ [HAOI2011]防线修建(动态凸包)的更多相关文章
- 【题解】P2521 [HAOI2011]防线修建(动态凸包)
[题解]P2521 [HAOI2011]防线修建(动态凸包) 凸包是易插入不好删除的东西,按照剧情所以我们时光倒流 然后问题就是维护凸包的周长,支持加入 本来很简单,但是计算几何就是一些小地方经验不足 ...
- BZOJ 2300: [HAOI2011]防线修建( 动态凸包 )
离线然后倒着做就变成了支持加点的动态凸包...用平衡树维护上凸壳...时间复杂度O(NlogN) --------------------------------------------------- ...
- 【bzoj2300】【Luogu P2521】 [HAOI2011]防线修建 动态凸包,平衡树,Set
一句话题意:给你一个凸包,每次可以插入一个点或者询问周长. 动态凸包裸题嘛,用\(Set\)实现.最初每个点坐标做乘三处理,便于取初始三角形的重心作为凸包判定原点. #include <bits ...
- 【BZOJ 2300】 2300: [HAOI2011]防线修建 (动态凸包+set)
2300: [HAOI2011]防线修建 Description 近来A国和B国的矛盾激化,为了预防不测,A国准备修建一条长长的防线,当然修建防线的话,肯定要把需要保护的城市修在防线内部了.可是A国上 ...
- bzoj千题计划236:bzoj2300: [HAOI2011]防线修建
http://www.lydsy.com/JudgeOnline/problem.php?id=2300 维护动态凸包,人懒用的set 用叉积判断,不要用斜率 #include<set> ...
- 【BZOJ2300】[HAOI2011]防线修建 set维护凸包
[BZOJ2300][HAOI2011]防线修建 Description 近来A国和B国的矛盾激化,为了预防不测,A国准备修建一条长长的防线,当然修建防线的话,肯定要把需要保护的城市修在防线内部了.可 ...
- [luogu P2521] [HAOI2011]防线修建
[luogu P2521] [HAOI2011]防线修建 题目描述 近来A国和B国的矛盾激化,为了预防不测,A国准备修建一条长长的防线,当然修建防线的话,肯定要把需要保护的城市修在防线内部了.可是A国 ...
- P2521 [HAOI2011]防线修建
题目链接:P2521 [HAOI2011]防线修建 题意:给定点集 每次有两种操作: 1. 删除一个点 (除开(0, 0), (n, 0), 与指定首都(x, y)) 2. 询问上凸包长度 至于为什么 ...
- 【bzoj2300】[HAOI2011]防线修建 离线+STL-set维护凸包
题目描述 给你(0,0).(n,0).(x,y)和另外m个点,除(0,0)(n,0)外每个点横坐标都大于0小于n,纵坐标都大于0. 输入 第一行,三个整数n,x,y分别表示河边城市和首都是(0,0), ...
随机推荐
- PHP 安装使用 gearman
1.安装服务器端: 官方下载,请到https://launchpad.net/gearmand. yum install boost-devel* gperf* libevent-devel* lib ...
- leangoo
leangoo网址:https://www.leangoo.com/
- onethink部署时后台登陆的问题
情况:本地开发后,上传到服务器时,无法登陆后台. 原因:用户的读取数据库的配置与应用的配置 分别在2个地方.而一般我们只记得修改一处配置. 解决:找到application/user/conf/con ...
- java和Ajax
原博(实在太啰嗦了):https://netbeans.org/kb/docs/web/ajax-quickstart_zh_CN.html 1.Ajax的基本原理 Ajax 代表异步 JavaScr ...
- 电商网站垮IDC数据备份,MySql主从同步,图片及其它数据文件的同步
原文网址:http://www.bzfshop.net/article/180.html 对一个电子商务网站而言,最宝贵的资源就是数据.服务器是很廉价的东西,即使烧了好几个也问题不大,但是用户数据如果 ...
- 简述Hibernate三种开发方式
1.由domain object->mapping->db(官方推荐) 2.由db开始,用工具生成mapping和domain object(使用较多) 3.由映射文件开始
- Windows API 函数浏览
AbortDoc 终止一项打印作业 是 是 ...
- 阿里云上给的防止跨站和xss攻击的代码
文档说明: 1.将waf.php传到要包含的文件的目录 2.在页面中加入防护,有两种做法,根据情况二选一即可: a).在所需要防护的页面加入代码require_once('waf.php');就可以做 ...
- globalToLocal的坐标变换
globalToLocal $(function() { init(); }); // globalToLocal var stage, holder1, holder2,shape; functio ...
- oracle存储过程返回结果集
http://www.2cto.com/database/201204/127180.html oracle实现存储过程返回查询结果集合的方法 --实现存储过程返回查询结果集合的方法 ,以下代码来 ...