bzoj1249: SGU277 HERO 动态凸包
动态维护凸包面积。
//Achen
#include<bits/stdc++.h>
#define For(i,a,b) for(int i=(a);i<=(b);i++)
#define Rep(i,a,b) for(int i=(a);i>=(b);i--)
#define Formylove return 0
const int N=;
typedef long long LL;
typedef double db;
using namespace std;
int n;
LL ans; template<typename T> void read(T &x) {
char ch=getchar(); T f=; x=;
while(ch!='-'&&(ch<''||ch>'')) ch=getchar();
if(ch=='-') f=-,ch=getchar();
for(;ch>=''&&ch<='';ch=getchar()) x=x*+ch-''; x*=f;
} struct pt {
LL x,y;
pt(){}
pt(LL x,LL y):x(x),y(y){}
friend bool operator <(const pt&A,const pt&B) {
return A.x<B.x||(A.x==B.x&&A.y<B.y);
}
}p[];
pt operator -(const pt&A,const pt&B) { return pt(A.x-B.x,A.y-B.y); }
pt operator +(const pt&A,const pt&B) { return pt(A.x+B.x,A.y+B.y); }
LL dot(pt A,pt B) { return A.x*B.x+A.y*B.y; }
LL cross(pt A,pt B) { return A.x*B.y-A.y*B.x; } set<pt>s1,s2;
#define IT set<pt>::iterator
void delr(set<pt>&s,pt P,IT l,IT r,int f) {
while(cross(P-(*l),(*r)-(*l))<=) {
if(f) ans+=cross((*r)-(*l),P-(*l));
s.erase(r); r=l;
if(l!=s.begin()) l--;
else break;
}
} void dell(set<pt>&s,pt P,IT l,IT r,int f) {
while(cross((*r)-P,(*l)-P)<=) {
if(f) ans+=cross((*l)-P,(*r)-P);
s.erase(*l); l=r; r++;
if(r==s.end()) break;
}
} void ins(set<pt>&s,pt P,int f) {
IT l,r,it;
if(s.size()<) {
s.insert(P); return ;
}
it=s.lower_bound(P);
if(it==s.end()) {
pt st=*s.begin(); --it;
if(f) ans-=cross((*it)-st,P-st);
r=it; l=r; --l;
if(cross(P-(*l),(*r)-(*l))<) delr(s,P,l,r,f);
}
else {
if(it==s.begin()) {
pt ed=*s.rbegin();
if(f) ans-=cross(P-ed,(*it)-ed);
l=it; r=l; ++r;
if(cross((*r)-P,(*l)-P)<) dell(s,P,l,r,f);
}
else {
r=it; l=r; --l;
if((*r).x==P.x&&(*r).y==P.y) return ;
if(cross(P-(*l),(*r)-(*l))>=) return ;
if(f) ans+=cross((*l)-P,(*r)-P);
r=l;
if(l!=s.begin()) {
--l;
delr(s,P,l,r,f);
}
l=it; r=l; ++r;
if(r!=s.end()) dell(s,P,l,r,f);
}
}
s.insert(P);
} int main() {
//freopen("1.in","r",stdin);
//freopen("1.out","w",stdout);
For(i,,) read(p[i].x),read(p[i].y);
ans=abs(cross(p[]-p[],p[]-p[]));
For(i,,) {
ins(s1,p[i],);
ins(s2,pt(-p[i].x,-p[i].y),);
}
read(n);
For(i,,n) {
pt P;
read(P.x); read(P.y);
ins(s1,P,);
ins(s2,pt(-P.x,-P.y),);
printf("%lld\n",ans);
}
Formylove;
}
bzoj1249: SGU277 HERO 动态凸包的更多相关文章
- 2019.02.21 bzoj1249: SGU277 HERO 动态凸包(set+凸包)
传送门 题意:动态插入点,维护凸包面积. 思路:用setsetset维护极角序来支持面积查询即可. 然后注意选原点的时候要从初始三个点随机平均系数来避免精度误差. 代码: #include<bi ...
- 【BZOJ 2300】 2300: [HAOI2011]防线修建 (动态凸包+set)
2300: [HAOI2011]防线修建 Description 近来A国和B国的矛盾激化,为了预防不测,A国准备修建一条长长的防线,当然修建防线的话,肯定要把需要保护的城市修在防线内部了.可是A国上 ...
- BZOJ 2300: [HAOI2011]防线修建( 动态凸包 )
离线然后倒着做就变成了支持加点的动态凸包...用平衡树维护上凸壳...时间复杂度O(NlogN) --------------------------------------------------- ...
- [NOI2007]货币兑换Cash(DP+动态凸包)
第一次打动态凸包维护dp,感觉学到了超级多的东西. 首先,set是如此的好用!!!可以通过控制一个flag来实现两种查询,维护凸包和查找斜率k 不过就是重载运算符和一些细节方面有些恶心,90行解决 后 ...
- BZOJ [HAOI2011]防线修建(动态凸包)
听说有一种很高端的东西叫动态凸包维护dp就像学一下,不过介于本人还不会动态凸包就去学了下,还是挺神奇的说,维护上下凸包的写法虽然打得有点多不过也只是维护复制黏贴的事情而已罢了. 先说下动态凸包怎么写吧 ...
- 【BZOJ 1701】Cow School(斜率优化/动态凸包/分治优化)
原题题解和数据下载 Usaco2007 Jan 题意 小牛参加了n个测试,第i个测试满分是\(p_i\),它的得分是\(t_i\).老师去掉\(t_i/p_i\)最小的d个测试,将剩下的总得分/总满分 ...
- Code Chef TSUM2(动态凸包+点分治)
题面 传送门 题解 真是毒瘤随机化算法居然一分都不给 首先这种树上的题目一般想到的都是点分 我们考虑如何统计经过当前点的路径的贡献,设当前点\(u\)在序列中是第\(c\)个,那么一条路径的贡献就是 ...
- codeforces 70 D. Professor's task 动态凸包
地址:http://codeforces.com/problemset/problem/70/D 题目: D. Professor's task time limit per test 1 secon ...
- CF70D(动态凸包)
CF70D(动态凸包) 给出q(<=1e5)个询问,每次在加上一个点,维护凸包,或者询问某个点是否在凸包内(在边上也算). 听说可以用cdq做--但是并不会.我等蒟蒻只会用平衡树做. 首先,假设 ...
随机推荐
- javaweb学习纲要
Java Web 概述 大纲: 1.C/S体系结构 2.B/S体系机构 3.两种体系结构比较 4.主流的Web程序应用平台 5.java web学习路线图 1.C/S体系结构 C/S是Client/ ...
- 前端 初级篇(HTML)
HTML 概述: HTML是英文Hyper Text Mark-up Language(超文本标记语言)的缩写,他是一种制作万维网页面标准语言(标记).相当于定义统一的一套规则,大家都来遵守他,这样就 ...
- 04_Apache Hadoop 生态系统
内容提纲: 1)对 Apache Hadoop 生态系统的认识(Hadoop 1.x 和 Hadoop 2.x) 2) Apache Hadoop 1.x 框架架构原理的初步认识 3) Apache ...
- java DateTimeUtil 日期工具类
package com.sicdt.library.core.utils; import java.sql.Timestamp; import java.text.DateFormat; import ...
- 【HackerRank】The Love-Letter Mystery
James找到了他的朋友Harry要给女朋友的情书.James很爱恶作剧,所以他决定要胡搞一下.他把信中的每个单字都变成了回文.对任何给定的字符串,他可以减少其中任何一个字符的值,例如'd'可以变成' ...
- git 使用教程 --基础一
第一步:下载git https://git-scm.com/ 第二步: 切到需要保存的文件夹下,执行: bogon:VBV mona$ git init #初始化,表示即将对当前文件夹进行版本控制 ...
- 快乐学习 Ionic Framework+PhoneGap 手册1-1{创建APP项目}
快乐学习 Ionic Framework+PhoneGap 手册1-1 * 前提必须安装 Node.js,安装PhoneGap,搭建Android开发环境,建议使用真机调试 {1.1}= 创建APP项 ...
- 获取蓝牙mac地址
http://macpu.github.io/2015/11/12/iOS%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E8%93%9D%E7%89%99Mac%E5%9C ...
- 基于netty的异步http请求
package com.pt.utils; import io.netty.bootstrap.Bootstrap; import io.netty.channel.ChannelFuture; im ...
- HIVE 配置文件详解
hive的配置: hive.ddl.output.format:hive的ddl语句的输出格式,默认是text,纯文本,还有json格式,这个是0.90以后才出的新配置: hive.exec.scri ...