因为只支持插入操作,所以需要倒过来做..
第一次写维护凸壳的东西…不抄题解..自己YY斜率乱搞(都忘了写叉乘)代码又长常数又大
1A一刻赛艇~
还是找一个靠谱的的模板吧...

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<queue>
#include<vector>
#include<map>
#include<set>
#include<algorithm>
#include<iostream>
#define N 500050
#define inf 2000000000
using namespace std;
int sc()
{int i=0,f=1; char c=getchar();while(c>'9'||c<'0'){if(c=='-')f=-1;c=getchar();}while(c>='0'&&c<='9')i=i*10+c-'0',c=getchar();return i*f;
}
set<pair<int,int> >st;
double ans,A[100002];
int a[100002],b[100002],d[100002];
int n,fx,fy,top,m,q;
bool c[100002];
double kk(int x,int y){return sqrt((double)x*x+y*y);}
double cal(int x,int y)
{if(!x)return inf;return (double)y/x;
}
void add(int x,int y)
{set<pair<int,int> >::iterator it,e;it=st.lower_bound(make_pair(x,y));if((*it).first==x)return;bool flag=0;while(++it!=st.end()){pair<int,int> b=*it,a=*--it;double l1=cal(a.first-x,a.second-y);double l2=cal(b.first-x,b.second-y);if(l2<l1)break;if(!flag){pair<int,int> c=*--it;it++;ans-=kk(c.first-a.first,c.second-a.second);flag=1;}ans-=kk(a.first-b.first,a.second-b.second);e=it,++it;st.erase(e);}it=st.lower_bound(make_pair(x,y));it--;while(it!=st.begin()){pair<int,int> a=*it,b=*--it;double l1=cal(a.first-x,a.second-y);double l2=cal(b.first-x,b.second-y);if(l2>l1)break;if(!flag){it++;it++;pair<int,int> c=*it;it--;it--;ans-=kk(c.first-a.first,c.second-a.second);flag=1;}ans-=kk(a.first-b.first,a.second-b.second);e=it,st.erase(++e);}if(flag) {it=st.lower_bound(make_pair(x,y));ans+=kk((*it).first-x,(*it).second-y);it--;ans+=kk((*it).first-x,(*it).second-y);st.insert(make_pair(x,y));}   else{it=st.lower_bound(make_pair(x,y));pair<int,int> a=*it,b=*--it;double l1=cal(a.first-x,a.second-y);double l2=cal(b.first-x,b.second-y);if(l1<l2){ans-=kk(a.first-b.first,a.second-b.second);ans+=kk((*it).first-x,(*it).second-y);it++;ans+=kk((*it).first-x,(*it).second-y);st.insert(make_pair(x,y));}}
}
int main()
{n=sc(),fx=sc(),fy=sc(),m=sc();for(int i=1;i<=m;i++)a[i]=sc(),b[i]=sc();q=sc();for(int i=1;i<=q;i++){d[i]=sc();if(d[i]==1)c[d[i]=sc()]=1;else d[i]=0;}st.insert(make_pair(0,0));st.insert(make_pair(n,0));st.insert(make_pair(fx,fy));ans=kk(fx,fy)+kk(fx-n,fy);for(int i=1;i<=m;i++)if(!c[i])add(a[i],b[i]);for(int i=q;i;i--){if(!d[i])A[++top]=ans;else add(a[d[i]],b[d[i]]);}while(top)printf("%.2lf\n",A[top--]);return 0;
}

BZOJ 2300: [HAOI2011]防线修建|set维护凸壳相关推荐

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

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

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

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

  3. [bzoj2300] [HAOI2011]防线修建

    Description 近来A国和B国的矛盾激化,为了预防不测,A国准备修建一条长长的防线,当然修建防线的话,肯定要把需要保护的城市修在防线内部了.可是A国上层现在还犹豫不决,到底该把哪些城市作为保护 ...

  4. Bzoj2300 / 洛谷P2521 [HAOI2011]防线修建

    题目描述 近来A国和B国的矛盾激化,为了预防不测,A国准备修建一条长长的防线,当然修建防线的话,肯定要把需要保护的城市修在防线内部了.可是A国上层现在还犹豫不决,到底该把哪些城市作为保护对象呢?又由于 ...

  5. 时空旅行[线段树分治][维护凸壳]

    文章目录 前言 题目 思路 代码 前言 肝了一上午-这是我才学线段树分治的例题-真舒服 题目 温馨提示:首先在UOJ做,LOJ挖数据,BZOJ终极评测... UOJ198 二手剽- 思路 为什么不能用 ...

  6. cogs 547:[HAOI2011] 防线修建

    ★★★☆   输入文件:defense.in   输出文件:defense.out   简单对比 时间限制:1 s   内存限制:128 MB 题目描述: 近来A国和B国的矛盾激化,为了预防不测,A国 ...

  7. P2521 [HAOI2011]防线修建

    传送门 一眼看出可以倒着做转为加点维护凸包,然后--然后我就不会了-- 看了一眼题解,大概是这样的,我们先把所有点都读进来,然后按极角排序,也就是说定义点的大小为他们极角的大小(本题里实际上直接按x坐 ...

  8. [haoi2011]防线修建

    动态加点维护凸包. 论STL的熟练运用. #include<cstdio> #include<algorithm> #include<cstring> #inclu ...

  9. bzoj2300 [HAOI2011]防线修建 离线凸包

    这个题可以在线做,splay维护凸包的同时维护区间最值线段树,当删除一个点就找跨过这个点的不在凸包上的点的y最值,然后分下去 由于一次确定一个点,所以复杂度还是nlogn的,只是比较难写 如果一个操作 ...

最新文章

  1. 快节奏的多人游戏同步 - 示例代码和在线演示
  2. u盘读写测试_如何提高u盘读写速度 提高u盘读写速度方法【详细步骤】
  3. Apache Hadoop 简单配置及实践
  4. uniapp h5页面 在移动端 使用clipboardone.js插件实现 写入剪切板 -- 安卓和ios安美适配(仅测试部分机型)
  5. matlab条形图颜色矩阵,matlab中的条形图开关颜色
  6. caffe for Windows下的编译错误
  7. asp if 显示按钮_ASP.NET Core 3.1入门教程(二)
  8. MATLAB实现冒泡排序-M文件
  9. 电子管:6J1基本特性文献调研
  10. sqlserver2008r2安装_SQL2008R2图文安装步骤详解
  11. 单片机引脚浮空输入注意事项-STM32
  12. 旋转矩阵的导数(机器人学)
  13. Xcode Undefined symbols 错误
  14. Linux下打开ISO文件两种方法
  15. GIT面试题——分支
  16. C#获取动态key的json对象的值
  17. woo语言一行代码批量修改文件名称
  18. 智慧交管大屏可视化决策系统
  19. 转让测绘资质,转让天津测绘资质
  20. 计算机无法联网的原因和解决方案,电脑连接不上网的原因和解决办法

热门文章

  1. c语言there的用法,C语言函数(H类字母)
  2. distinct多字段去重查询问题
  3. android gridview自适应高度,Android GridView自适应Item高度
  4. html 弹出层 边框半透明,js+CSS实现弹出居中背景半透明div层的方法
  5. 怎么查oracle ocm证书,Oracle OCM认证
  6. Quartz动态改变Cron表达式,来实现动态执行Spring定时任务
  7. 如何处理 No DMARC Record Found 问题
  8. 百度地图api 密钥获取
  9. oracle 单机改rac,把oracle rac 转化作单机数据库
  10. PSR规范 (psr-0,psr-1,psr-2,psr-3,psr-4)