题意:

给出一个点集,每次可能删去一个点或查询上凸包的面积;

保证无重点,保证最左面 最右面的点一定在凸包上;

n<=100000,m<=200000;

题解:

动态凸包问题,然而这道题的保证简直极为良心;

所以呢,我们就可以用set来水这道题啦;

我还是涨了不少姿势的,比如迭代器居然可以自减;

离线所有的操作之后处理,就是凸包加点了;

每次来一个点,判断一下加不加入,之后左面干点右面干点,插进去就好了;

不过这题细节还是用很多,主要是边界问题吧;

时间复杂度O(set(n))O(nlogn);

代码:

#include<set>
#include<math.h>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#define N 110000
#define iter set<Point>::iterator
using namespace std;
const double INF=1e100;
struct Point
{int x,y;Point(){}Point(int _,int __):x(_),y(__){}friend bool operator <(Point a,Point b){if(a.x==b.x)return a.y<b.y;return a.x<b.x;}friend bool operator ==(Point a,Point b){return a.x==b.x&&a.y==b.y;}friend bool slope (Point a,Point b,Point c){double s1=a.x==b.x?(a.y<b.y?INF:-INF):(a.y-b.y)*1.0/(a.x-b.x);double s2=b.x==c.x?(b.y<c.y?INF:-INF):(b.y-c.y)*1.0/(b.x-c.x);return s1<s2;}friend double dis(Point a,Point b){return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y)+0.0);}
}a[N],p;
int Qx[N<<1],top;
bool Q[N<<1],ban[N];
double st[N<<1];
set<Point>s;
int main()
{int n,m,q,i,j,k;double ans;scanf("%d%d%d",&n,&p.x,&p.y);s.insert(p),s.insert(Point(0,0)),s.insert(Point(n,0));scanf("%d",&m);for(i=1;i<=m;i++){scanf("%d%d",&a[i].x,&a[i].y);}scanf("%d",&q);for(i=1;i<=q;i++){scanf("%d",&k);if(k==1){Q[i]=1;scanf("%d",Qx+i);ban[Qx[i]]=1;}}ans=dis(p,Point(0,0))+dis(p,Point(n,0));for(i=1;i<=m;i++){if(!ban[i]){iter it1=s.insert(a[i]).first;iter it2=it1,temp=it1;it1++,it2--;if(slope(*it2,a[i],*it1)){s.erase(temp);continue;}if(*it1==Point(n,0)&&*it2==Point(0,0))ans=0;elseans-=dis(*it1,*it2);temp=it1;while(++temp!=s.end()&&slope(a[i],*it1,*temp))ans-=dis(*it1,*temp),s.erase(it1++);temp=it2;while(temp--!=s.begin()&&slope(*temp,*it2,a[i]))ans-=dis(*it2,*temp),s.erase(it2--);ans+=dis(a[i],*it1)+dis(a[i],*it2);}}for(i=q;i>=1;i--){if(Q[i]){iter it1=s.insert(a[Qx[i]]).first;iter it2=it1,temp=it1;it1++,it2--;if(slope(*it2,a[Qx[i]],*it1)){s.erase(temp);continue;}if(*it1==Point(n,0)&&*it2==Point(0,0))ans=0;elseans-=dis(*it1,*it2);temp=it1;while(++temp!=s.end()&&slope(a[Qx[i]],*it1,*temp))ans-=dis(*it1,*temp),s.erase(it1++);temp=it2;while(temp--!=s.begin()&&slope(*temp,*it2,a[Qx[i]]))ans-=dis(*it2,*temp),s.erase(it2--);ans+=dis(a[Qx[i]],*it1)+dis(a[Qx[i]],*it2);}elsest[++top]=ans;}while(top){printf("%.2lf\n",st[top--]);}
}

bzoj-2300 防线修建相关推荐

  1. BZOJ 2300 防线修建(set维护凸包)

    题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2300 题意:给出一些点,两种操作:(1)删掉某个点:(2)求剩下点构成的凸包的周长.(保 ...

  2. bzoj2300【HAOI2011】防线修建

    2300: [HAOI2011]防线修建 Time Limit: 10 Sec  Memory Limit: 512 MB Submit: 696  Solved: 384 [ Submit][ St ...

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

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

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

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

  5. BZOJ 2300: [HAOI2011]防线修建|set维护凸壳

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

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

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

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

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

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

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

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

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

  10. P2521 [HAOI2011]防线修建

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

最新文章

  1. python与excel表格-超简单:用Python让Excel飞起来
  2. IT从业者都应关注的软件行业的变化
  3. 转:求多边形的面积 算法几何
  4. // 、| || 的区别
  5. 吴杭民:上海的生活成本高过纽约(贪污腐败横行)
  6. greenPlum资源隔离
  7. 网站渗透测试,看这篇就够了
  8. jvm(13)-线程安全与锁优化
  9. Spring 3.1缓存和配置
  10. 协议簇:TCP 解析: 建立连接
  11. .net 移除html标签,.net去除html标签代码
  12. Linux下限制用户通过SFTP访问指定目录
  13. 跟想这台计算机usb无法识别,无法识别的USB设备:跟这台计算机连接的一个USB设备运行不正常,WINDOWS无法识别...
  14. Bailian4107 19岁生日礼物-Birthday Gift【进制】
  15. JavaScript动态生成HTML元素
  16. [视频教程]MAME画质优化hq3x
  17. 浏览器-点击预览视频文件(自动播放、循环播放)
  18. 显示行数 设置ssh终端_SSH终端命令工具:zoc7 for Mac
  19. python发送邮箱_利用Python自动发送电子邮件
  20. HDMI协议介绍(六)--EDID

热门文章

  1. C# 哈希sha1加密
  2. 社会化媒体营销的优势
  3. 不刷卡,不扫码,微信推出刷掌支付;AI“黑箱”被打开?谷歌找到大模型能力涌现机制|极客头条
  4. qq账号存在异常原因
  5. 串联系统和并联系统可靠度计算
  6. hadoop集群搭建出现的一些问题总结
  7. 如何理解进程与线程(超级简单,人人可以看懂)
  8. 2010年天灾预测年度报告简表
  9. 数据治理在苏宁易购的应用
  10. 操作系统精髓与设计原理 第9版总结