思路:

倒着加显然吧  动态维护这个凸包就好了

//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凸包+离线的更多相关文章

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

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

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

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

  3. bzoj 2300: [HAOI2011]防线修建 凸包

    题目大意: http://www.lydsy.com/JudgeOnline/problem.php?id=2300 题解 这道题让我们维护一个支持动态删除点的上凸壳 并且告诉了我们三个一定不会被删除 ...

  4. bzoj 2300 [HAOI2011]防线修建 set动态维护凸包

    题目大意 动态删点,求凸包周长 分析 反过来变成动态加点 用set维护平衡树 具体是找到凸包上左右两点 拆开 就可以把左边当作顺时针求的一个凸包,右边当作逆时针求的一个凸包,像栈那样出set就好了 注 ...

  5. 防线修建 bzoj 2300

    防线修建(1s 512MB)defense [问题描述] 近来A国和B国的矛盾激化,为了预防不测,A国准备修建一条长长的防线,当然修建防线的话,肯定要把需要保护的城市修在防线内部了.可是A国上层现在还 ...

  6. BZOJ 2300 防线修建

    http://www.lydsy.com/JudgeOnline/problem.php?id=2300 题意:给点,有以下操作:删去一个点,询问这些点构成凸包的周长. 思路:用splay维护上凸壳, ...

  7. 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$ 这显然就是凸包了 以一个斜率不断向下(上)走   ...

  8. BZOJ 3585: mex( 离线 + 线段树 )

    离线, 询问排序. 先处理出1~i的答案, 这样可以回答左端点为1的询问.完成后就用seq(1)将1到它下一次出现的位置前更新. 不断这样转移就OK了 ------------------------ ...

  9. bzoj 2300 : [HAOI2011]防线修建

    set动态维护凸包 #include<iostream> #include<cstdio> #include<cstring> #include<algori ...

随机推荐

  1. python之cookbook-day03

    第一章:数据结构和算法 1.3 保留最后 N 个元素 问题: 在迭代操作或其他操作的时候,怎样只保留最后有限几个元素的历史记录? 解决方案: 保留有限历史记录正是 collections.deque ...

  2. software collection

    software software Table of Contents 1. Privacy 2. GFW 2.1. google search 2.2. 修改 DNS 服务器 2.2.1. 修改ip ...

  3. [bzoj1042][HAOI2008][硬币购物] (容斥原理+递推)

    Description 硬币购物一共有4种硬币.面值分别为c1,c2,c3,c4.某人去商店买东西,去了tot次.每次带di枚ci硬币,买si的价值的东西.请问每次有多少种付款方法. Input 第一 ...

  4. 表格头部header固定

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. 总结for循环及for循环增强遍历数组,list,set和map

    一.对于集合 (1)普通for循环 int[] arr = { 2, 1, 2 }; for(int i=0;i<arr.length;i++){ System.out.println(arr[ ...

  6. nyoj_528_找球号(三)_201404152050

    找球号(三) 时间限制:2000 ms  |  内存限制:3000 KB 难度:2   描述 xiaod现在正在某个球场负责网球的管理工作.为了方便管理,他把每个球都编了号,且每个编号的球的总个数都是 ...

  7. G - 免费馅饼 基础DP

    都说天上不会掉馅饼,但有一天gameboy正走在回家的小径上,忽然天上掉下大把大把的馅饼.说来gameboy的人品实在是太好了,这馅饼别处都不掉,就掉落在他身旁的10米范围内.馅饼如果掉在了地上当然就 ...

  8. AI小记-K近邻算法

    K近邻算法和其他机器学习模型比,有个特点:即非参数化的局部模型. 其他机器学习模型一般都是基于训练数据,得出一般性知识,这些知识的表现是一个全局性模型的结构和参数.模型你和好了后,不再依赖训练数据,直 ...

  9. BZOJ(6) 1084: [SCOI2005]最大子矩阵

    1084: [SCOI2005]最大子矩阵 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3566  Solved: 1785[Submit][Sta ...

  10. vector实现

    typedef int size_type; /* vector维护的是一个连续线性空间,提供的迭代器是Random Access Iterators即普通指针 */ template <cla ...