将问题离线倒序处理,问题变成动态加点维护凸包。

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <iostream>
#include <cctype>
#include <set>
#define rep(i, l, r) for(int i=l; i<=r; i++)
#define down(i, l, r) for(int i=l; i>=r; i--)
#define maxn 200009
using namespace std;
inline int read()
{int x=0, f=1; char ch=getchar();while (!isdigit(ch)) {if (ch=='-') f=-1; ch=getchar();}while (isdigit(ch)) x=x*10+ch-'0', ch=getchar();return x*f;
}
struct P{int x, y;} a[200005], del[100005];
double dis(P a, P b){return sqrt((double)(a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));}
P operator - (P a, P b){return (P){a.x-b.x, a.y-b.y};}
double operator * (P a, P b){return a.x*b.y-a.y*b.x;}
bool operator < (P a, P b){if (a.x==b.x) return a.y<b.y; else return a.x<b.x;}
set<P> q;
int n, m, Q, b[maxn], t1, t2;
double now=0, res[maxn];
bool mark[maxn];
void insert(P p)
{set<P>::iterator r=q.lower_bound(p), l=r, t; l--;if ((*r-*l)*(p-*l)<0) return;now-=dis(*l, *r);while (1){t=r++;if (r==q.end()) break;if ((*r-p)*(*t-p)>0) break;now-=dis(*t, *r);q.erase(t);}while (l!=q.begin()){t=l--;if ((*t-p)*(*l-p)>0) break;now-=dis(*t, *l);q.erase(t);}q.insert(p); l=r=q.find(p); l--; r++;now+=dis(*l, p)+dis(*r, p);
}int main()
{n=read();q.insert((P){0, 0}); q.insert((P){n, 0});P bas;bas.x=read(); bas.y=read(), q.insert(bas);now+=dis((P){0, 0}, bas)+dis((P){n, 0}, bas);m=read();rep(i, 1, m) a[i].x=read(), a[i].y=read();Q=read();rep(i, 1, Q){int type=read(), x;if (type==1) x=read(), del[++t1]=a[x], mark[x]=1;else b[++t2]=t1;}rep(i, 1, m) if (!mark[i]) insert(a[i]);int T=t1;down(i, t2, 1){while (T>b[i]) insert(del[T--]);res[i]=now;}rep(i, 1, t2) printf("%.2lf\n", res[i]);return 0;
}

转载于:https://www.cnblogs.com/NanoApe/p/4480039.html

BZOJ-2300 [HAOI2011]防线修建相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  8. P2521 [HAOI2011]防线修建

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

  9. [haoi2011]防线修建

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

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

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

最新文章

  1. eclipse注释模板设置(未整理)
  2. 有向图php,小蚂蚁学习数据结构(29)——图的存储表示
  3. 9102年webpack4搭建vue项目
  4. 构造数组MaxTree、环形单链表的约瑟夫问题等总结
  5. 稀疏自编码器符号一览表
  6. Python类的约束以及super()剖析
  7. Java进阶:ReentrantLock实现原理解析(公平锁、非公平锁、可重入锁、自旋锁)
  8. exchange命令整理
  9. mysql 查看集群状态_MySQL数据库集群正确配置步骤
  10. 如何安装tensorflowGPU环境搭建(不报AVX2的警告)
  11. MongoDB分布式集群分片
  12. Linux Shell变量使用
  13. python not_刚接触Python,python中not in怎么解释?求解释一下?
  14. 激励机制:区块链的幕后英雄
  15. [EE261学习笔记] 4.常用的几个傅里叶变换相关公式
  16. 基于MS强度或计数的数据依赖法非标记定量蛋白质组学的蛋白质互作分析(一)
  17. 前端是什么,是干嘛的
  18. Vuex Actions使用
  19. 背景建模方法论文总结
  20. 最简单DIY基于ESP8266的智能彩灯①(在网页用按钮点亮普通RGB灯)

热门文章

  1. 如何证明永动机不可能制造出来
  2. SHELL下如何去掉字串里的空格(或指定字符)
  3. WORD中使用类似苹果手机的字体Lucida Sans
  4. java多线程常用面试_Java多线程常用面试题(含答案,精心总结整理)
  5. C# 置顶EXE 把EXE放最前面 ProcessStartInfo
  6. C# 编译后执行bat等脚本文件 运行脚本文件 执行Copy 执行XCopy
  7. python orm开发模型_Python ORM框架Peewee初探【二】创建或者生成模型
  8. 全局变量 局部变量 静态变量
  9. PHP 中 flush() 与 ob_flush() 的区别
  10. Web 加速,协议先行!