听说有一种很高端的东西叫动态凸包维护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]防线修建(动态凸包)的更多相关文章

  1. 【题解】P2521 [HAOI2011]防线修建(动态凸包)

    [题解]P2521 [HAOI2011]防线修建(动态凸包) 凸包是易插入不好删除的东西,按照剧情所以我们时光倒流 然后问题就是维护凸包的周长,支持加入 本来很简单,但是计算几何就是一些小地方经验不足 ...

  2. BZOJ 2300: [HAOI2011]防线修建( 动态凸包 )

    离线然后倒着做就变成了支持加点的动态凸包...用平衡树维护上凸壳...时间复杂度O(NlogN) --------------------------------------------------- ...

  3. 【bzoj2300】【Luogu P2521】 [HAOI2011]防线修建 动态凸包,平衡树,Set

    一句话题意:给你一个凸包,每次可以插入一个点或者询问周长. 动态凸包裸题嘛,用\(Set\)实现.最初每个点坐标做乘三处理,便于取初始三角形的重心作为凸包判定原点. #include <bits ...

  4. 【BZOJ 2300】 2300: [HAOI2011]防线修建 (动态凸包+set)

    2300: [HAOI2011]防线修建 Description 近来A国和B国的矛盾激化,为了预防不测,A国准备修建一条长长的防线,当然修建防线的话,肯定要把需要保护的城市修在防线内部了.可是A国上 ...

  5. bzoj千题计划236:bzoj2300: [HAOI2011]防线修建

    http://www.lydsy.com/JudgeOnline/problem.php?id=2300 维护动态凸包,人懒用的set 用叉积判断,不要用斜率 #include<set> ...

  6. 【BZOJ2300】[HAOI2011]防线修建 set维护凸包

    [BZOJ2300][HAOI2011]防线修建 Description 近来A国和B国的矛盾激化,为了预防不测,A国准备修建一条长长的防线,当然修建防线的话,肯定要把需要保护的城市修在防线内部了.可 ...

  7. [luogu P2521] [HAOI2011]防线修建

    [luogu P2521] [HAOI2011]防线修建 题目描述 近来A国和B国的矛盾激化,为了预防不测,A国准备修建一条长长的防线,当然修建防线的话,肯定要把需要保护的城市修在防线内部了.可是A国 ...

  8. P2521 [HAOI2011]防线修建

    题目链接:P2521 [HAOI2011]防线修建 题意:给定点集 每次有两种操作: 1. 删除一个点 (除开(0, 0), (n, 0), 与指定首都(x, y)) 2. 询问上凸包长度 至于为什么 ...

  9. 【bzoj2300】[HAOI2011]防线修建 离线+STL-set维护凸包

    题目描述 给你(0,0).(n,0).(x,y)和另外m个点,除(0,0)(n,0)外每个点横坐标都大于0小于n,纵坐标都大于0. 输入 第一行,三个整数n,x,y分别表示河边城市和首都是(0,0), ...

随机推荐

  1. iOS搜索框UISearchBar 分类: ios技术 2015-04-03 08:55 82人阅读 评论(0) 收藏

    当你在seachBar中输入字母之前的时候,只是用鼠标选中searchBar的时候,如图 终端输出截图如下:(这个时候调用先shouldBeginEditing,之后调用didBeginEditing ...

  2. 可持久化Trie树初步

    可持久化Trie树和可持久化线段树很像,依次插入信息,通过减法来进行历史版本查询. 2015年11月27日 bzoj3261 最大异或和 我们需要计算 a[p] xor a[p+1] xor ... ...

  3. VMWare虚拟机bridged、host-only和NAT网络模式的区别和用法

    VMWare提供了三种工作模式,它们是bridged(bridged 模式).NAT( 网络地址转换模式)和host-only(主机模式) . 1  VMWare虚拟机bridged.host-onl ...

  4. 安装pip工具

    Python 2.7.9+ and 3.4+ Good news! Python 3.4 (released March 2014) and Python 2.7.9 (released Decemb ...

  5. PCA主成分分析方法

    PCA: Principal Components Analysis,主成分分析. 1.引入 在对任何训练集进行分类和回归处理之前,我们首先都需要提取原始数据的特征,然后将提取出的特征数据输入到相应的 ...

  6. IM 融云 之 安装cocoapods 安装 SDK

    1. podfile 内容如下: platform :ios, '7.0' pod 'RongCloudIMKitWithVoip', '2.4.3' 现在最新是2.4.3 导入之后,就直接可以用了. ...

  7. javascript 备忘录

    JS语法 javascript 对象: var cars=new Array("Audi","BMW","Volvo"); 声明变量类型 当 ...

  8. eclipse使用egit提交代码报错

    在eclipse上使用插件egit同步代码时出现如下错误 解决办法: 开eclipse中的windows-->Preferences-->Team-->Git-->Config ...

  9. php防止重复提交表单

    解决方案一:引入cookie机制来解决 提交页面代码如下a.php代码如下: <form id="form1" name="form1" method=& ...

  10. Struts2 属性驱动、模型驱动、异常机制

    模型驱动使用单独的VO(值对象)来封装请求参数和处理结果,属性驱动则使用Action实例来封装请求参数和处理结果. 一.使用模型驱动 1.login.action采用模型驱动模式实现,采用模型驱动时必 ...