set动态维护凸包

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<set>
#include<cmath>
#define N 200005
using namespace std;
struct node
{
int x,y;
node(){;}
node(int _x,int _y){x=_x;y=_y;}
friend bool operator < (const node &aa,const node &bb)
{
if(aa.x!=bb.x)return aa.x<bb.x;
return aa.y<bb.y;
}
friend node operator - (const node &aa,const node &bb)
{
return node(aa.x-bb.x,aa.y-bb.y);
}
friend int operator * (const node &aa,const node &bb)
{
return aa.x*bb.y-aa.y*bb.x;
}
friend bool operator == (const node &aa,const node &bb)
{
return aa.x==bb.x&&aa.y==bb.y;
}
}q[N];
double dis(node a,node b)
{
return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
}
set<node>s;
set<node>::iterator it,st,t1,t2;
int n,xx,yy,m;
bool v[N];
int qr[N][2],cas;
double now;
double ans[N];
void add(node p)
{
it=s.lower_bound(p);
node suc=(*it);
if(suc==p)return ;
--it;st=it;
node pre=(*it);
if((p-suc)*(pre-suc)<=0)return ;
now-=dis(suc,pre);
it=s.lower_bound(p);
t1=it;++it;
while(it!=s.end())
{
if((*t1-p)*(*it-p)<0)break;
now-=dis(*it,*t1);
s.erase(t1);
t1=it;++it;
}
while(st!=s.begin())
{
t2=st;--st;
if((*t2-p)*(*st-p)>0)break;
now-=dis(*t2,*st);
s.erase(t2);
}
s.insert(p);
it=st=s.find(p);
it--;st++;
now+=dis(*it,p);now+=dis(*st,p);
return ;
}
int main()
{
scanf("%d%d%d",&n,&xx,&yy);
s.insert(node(n,0));s.insert(node(0,0));
s.insert(node(xx,yy));
now+=dis(node(xx,yy),node(n,0));
now+=dis(node(xx,yy),node(0,0));
scanf("%d",&m);
for(int i=1;i<=m;i++)scanf("%d%d",&q[i].x,&q[i].y);
scanf("%d",&cas);
for(int i=1;i<=cas;i++)
{
scanf("%d",&qr[i][0]);
if(qr[i][0]==1)
{
scanf("%d",&qr[i][1]);
v[qr[i][1]]=1;
}
}
for(int i=1;i<=m;i++)
{
if(!v[i])add(q[i]);
}
for(int i=cas;i>=1;i--)
{
if(qr[i][0]==2)
{
ans[i]=now;
}
else
{
add(q[qr[i][1]]);
}
}
for(int i=1;i<=cas;i++)
{
if(qr[i][0]==2)printf("%.2f\n",ans[i]);
}
return 0;
}

  

bzoj 2300 : [HAOI2011]防线修建的更多相关文章

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

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

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

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

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

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

  4. BZOJ 2300 [HAOI2011]防线修建 ——计算几何

    只需要倒着插入,然后维护一个凸包就可以了. 可以用来学习set的用法 #include <map> #include <set> #include <cmath> ...

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

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

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

    题解:带删点的维护凸包,1.删点2.查询凸包周长 题解:倒着做就成了带加点的维护凸包,加点时维护一下周长就没了 //#pragma GCC optimize(2) //#pragma GCC opti ...

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

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

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

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

  9. P2521 [HAOI2011]防线修建

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

随机推荐

  1. Beta阶段版本控制报告

    版本控制代码及文档要求 在coding.net版本控制; 公开项目,教师.专家.其他同学可以不注册源代码.在此公布git地址. 报告beta阶段2周中,项目的版本控制情况,不包括未在coding.ne ...

  2. Scrum Meeting 12 -2014.11.18

    今天的任务都比较顺利,测试暂时还没发现特别的问题. Member Today’s task Next task 林豪森 与其他小组商讨整合问题 与其他小组商讨整合问题 宋天舒 测试项目功能实现 测试项 ...

  3. 20172319 实验二《Java面向对象程序设计》实验报告

    20172319 2018.04.17-30 实验二<Java面向对象程序设计>实验报告 课程名称:<程序设计与数据结构> 学生班级:1723班 学生姓名:唐才铭 学生学号:2 ...

  4. <<梦断代码>>读后感

    <梦断代码>中对软件工程所面临的种种困难与艰难的描述,即便再过5年读也许都不过时.因为正如原作者所说,书中描写的是一队人马并肩扛起代码大石,虽历经磨难仍欲将其推上山顶的故事,而正是这种故事 ...

  5. 软工1816 · Beta冲刺(5/7)

    团队信息 队名:爸爸饿了 组长博客:here 作业博客:here 组员情况 组员1(组长):王彬 过去两天完成了哪些任务 推进后端完成安卓端接口的开发 在测试中发现返回地图接口存在错误(待修复) 推进 ...

  6. json反序列化对象

    这个是同事研究的wcf中中根据type类型反序列化json的示例 /// <summary> /// json转对象 /// </summary> /// <param ...

  7. CSS+JS笔记

    CSS篇: 1.a标签去掉下划线 a { text-decoration:none; }

  8. BeTa阶段Day4

    一.提供当天站立式会议照片一张 二.每个人的工作 1.讨论项目每个成员的昨天进展 刘阳航:优化障碍物生成. 林庭亦:调整难度设置. 郑子熙:改进UI,美化界面. 陈文俊:优化代码结构. 2.讨论项目每 ...

  9. Angular与PHP之间的不同的请求方式(post/get)导致的传参问题

    angularJS的$http发送POST请求,PHP无法接受数据的问题 使用jQuery进行ajax请求 $.ajax({ type: 'POST', url:'url.php', data: da ...

  10. [知乎]SSD的延迟

    以及一些SSD的性能数据