BZOJ 2300凸包+离线
思路:
倒着加显然吧 动态维护这个凸包就好了
//By SiriusRen
#include <bits/stdc++.h>
using namespace std;
const int N=;
int n,m,q,vis[N];
double now;
struct Point{int x,y;}point[N],jy,tmp,tt;
struct Query{int x,op;double ans;}ask[N];
Point operator-(Point a,Point b){
Point c;c.x=a.x-b.x,c.y=a.y-b.y;return c;
}
int operator*(Point a,Point b){
return a.x*b.y-a.y*b.x;
}
bool operator<(Point a,Point b){
if(a.x!=b.x)return a.x<b.x;
return a.y<b.y;
}
double dis(Point a,Point b){
a=a-b;return sqrt(a.x*a.x+a.y*a.y);
}
set<Point>s;set<Point>::iterator l,r,t;
void insert(Point a){
r=s.lower_bound(a),l=r,l--;
if((*r-*l)*(a-*l)<)return;
now-=dis((*l),(*r));
s.insert(a),t=r,r++;
while(r!=s.end()&&(*r-a)*(*t-a)<)
now-=dis(*t,*r),s.erase(t),t=r,r++;
while(l!=s.begin()){
t=l,l--;
if((*t-a)*(*l-a)>)break;
now-=dis(*t,*l),s.erase(t);
}
l=r=t=s.find(a),l--,r++;
now+=dis(*l,a)+dis(*r,a);
}
int main(){
s.insert(tt);
scanf("%d%d%d%d",&n,&jy.x,&jy.y,&m);
tmp.x=n;now+=dis(tt,jy)+dis(jy,tmp);
for(int i=;i<=m;i++)
scanf("%d%d",&point[i].x,&point[i].y);
scanf("%d",&q);
for(int i=;i<=q;i++){
scanf("%d",&ask[i].op);
if(ask[i].op==)scanf("%d",&ask[i].x),vis[ask[i].x]=;
}s.insert(jy),s.insert(tmp);
for(int i=;i<=m;i++)if(!vis[i])insert(point[i]);
for(int i=q;i;i--){
if(ask[i].op==)insert(point[ask[i].x]);
else ask[i].ans=now;
}
for(int i=;i<=q;i++)
if(ask[i].op!=)printf("%.2lf\n",ask[i].ans);
}
BZOJ 2300凸包+离线的更多相关文章
- 【BZOJ 2300】 2300: [HAOI2011]防线修建 (动态凸包+set)
2300: [HAOI2011]防线修建 Description 近来A国和B国的矛盾激化,为了预防不测,A国准备修建一条长长的防线,当然修建防线的话,肯定要把需要保护的城市修在防线内部了.可是A国上 ...
- BZOJ 2300: [HAOI2011]防线修建( 动态凸包 )
离线然后倒着做就变成了支持加点的动态凸包...用平衡树维护上凸壳...时间复杂度O(NlogN) --------------------------------------------------- ...
- bzoj 2300: [HAOI2011]防线修建 凸包
题目大意: http://www.lydsy.com/JudgeOnline/problem.php?id=2300 题解 这道题让我们维护一个支持动态删除点的上凸壳 并且告诉了我们三个一定不会被删除 ...
- bzoj 2300 [HAOI2011]防线修建 set动态维护凸包
题目大意 动态删点,求凸包周长 分析 反过来变成动态加点 用set维护平衡树 具体是找到凸包上左右两点 拆开 就可以把左边当作顺时针求的一个凸包,右边当作逆时针求的一个凸包,像栈那样出set就好了 注 ...
- 防线修建 bzoj 2300
防线修建(1s 512MB)defense [问题描述] 近来A国和B国的矛盾激化,为了预防不测,A国准备修建一条长长的防线,当然修建防线的话,肯定要把需要保护的城市修在防线内部了.可是A国上层现在还 ...
- BZOJ 2300 防线修建
http://www.lydsy.com/JudgeOnline/problem.php?id=2300 题意:给点,有以下操作:删去一个点,询问这些点构成凸包的周长. 思路:用splay维护上凸壳, ...
- BZOJ 4140 凸包+二进制分组
思路: $(x_0-x)^2+(y_0-y)^2<=x^2+y^2$ $y>=(-x_0/y_0)x+(x_0^2+y_0^2)/2y0$ 这显然就是凸包了 以一个斜率不断向下(上)走 ...
- BZOJ 3585: mex( 离线 + 线段树 )
离线, 询问排序. 先处理出1~i的答案, 这样可以回答左端点为1的询问.完成后就用seq(1)将1到它下一次出现的位置前更新. 不断这样转移就OK了 ------------------------ ...
- bzoj 2300 : [HAOI2011]防线修建
set动态维护凸包 #include<iostream> #include<cstdio> #include<cstring> #include<algori ...
随机推荐
- (六)python3 字符串常用方法
字符串截取 >>>s = 'hello' >>>s[0:3] 'he' >>>s[:] #截取全部字符 'hello' 消除空格及特殊符号 ...
- PyCharm开发GUI之PyQt安装
开发环境 PyCharm 2018.3.3python3.7 1 安装pyqt5 pip install PyQt5-tools 2 配置PyCharm 2.1 配置设计器 其中,program为C: ...
- springcloud(十):熔断监控Hystrix Dashboard
申明: 这里比较坑爹,大家写的时候要小心,这里和springboot的版本有关系哈,我使用的是2.0 版本,要么调频为1.5 版本,要么使用其他方式 解决错误,我选择了还是用2.0 ...
- js中复制功能总结
目前copy主流有四种方式:ZeroClipboard,Clipboard.js,execCommand,setData,clipboardData 概况: ZeroClipboard 就是常说的Fl ...
- 【Codeforces 522B】Photo to Remember
[链接] 我是链接,点我呀:) [题意] 题意 [题解] 模拟题.用set模拟下就好 [代码] import java.io.*; import java.util.*; public class M ...
- 转载 - Struts2基于XML配置方式实现对action的所有方法进行输入校验
出处:http://www.cnblogs.com/Laupaul/archive/2012/03/15/2398360.html http://www.blogjava.net/focusJ/arc ...
- [河南省队2012] 找第k小的数
★★☆ 输入文件:kth.in 输出文件:kth.out 简单对比时间限制:1 s 内存限制:128 MB 题目描述 看到很短的题目会让人心情愉悦,所以给出一个长度为N的序列A1,A2 ...
- - > 动规讲解基础讲解三——混合背包(背包模板)
将01背包,完全背包,和多重完全背包问题结合起来,那么就是混合三种背的问题 根据三种背包的思想,那么可以得到混合三种背包的问题可以这样子求解 for(int i=1; i<=N; ++i) if ...
- 【CV论文阅读】YOLO:Unified, Real-Time Object Detection
YOLO的一大特点就是快,在处理上可以达到完全的实时.原因在于它整个检测方法非常的简洁,使用回归的方法,直接在原图上进行目标检测与定位. 多任务检测: 网络把目标检测与定位统一到一个深度网络中,而且可 ...
- 1.3-动态路由协议EIGRP
EIGRP(Enhanced IGRP) EIGRP的特点: IGRP/EIGRP都是CISCO的私有协议. 1:是唯一的一种LS/DV的混合协议. 2:Rapid convergence EIGRP ...