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做--但是并不会.我等蒟蒻只会用平衡树做. 首先,假设 ...
随机推荐
- Jquery.ScrollLoading图片延迟加载技术
关于分屏加载图片,像天猫.京东等电商图片较多页面很长,就采用了延迟加载技术. 目前很流行的做法就是滚动动态加载,显示屏幕之外的图片默认是不加载的, 随着页面的滚动,显示区域图片才被动态加载. 原理其实 ...
- CSS3 画点好玩的东西
虽然项目赶工还是挺忙的,但闲了总要找点乐子嘛,毕竟秃顶和猝死两座大山夹逼着编程员们. 好吧,其实是无聊起来我自己都怕,于是就做了点小玩意. .heart { position: relative; t ...
- awk中使用shell变量
方法:使用-v参数. 对于多个shell变量使用多个-v 有个关于shell变量中的空格问题:
- 20145230《JAVA程序设计》第1周学习总结
20145230<JAVA程序设计>第一周学习总结 教材学习内容总结 在第一周的学习中,我初次认识了JAVA程序的一些基础知识.首先,我们需要在网上先下载JDK或者JDE,通过视频的学习, ...
- 通过加载Xib文件来创建UITableViewCell造成复用数据混乱问题方案
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPa ...
- [RK3288][Android6.0] TS-ADC驱动流程小结【转】
本文转载自:https://blog.csdn.net/kris_fei/article/details/55045936 Platform: RK3288OS: Android 6.0Kernel: ...
- JAVA基础补漏--基础数据类型与引用数据类型
==在不同数据类型中意义不同. 在基础数据类型中,表示的是数值的比较. 在引用数据类型中,表示的是内存地址值的比较. 一.基本数据类型: byte:Java中最小的数据类型,在内存中占8位(bit), ...
- python脚本发送电子邮件
#!/usr/bin/pythonimport smtplibimport stringHOST='smtp.qq.com'#HOST='mail.qq.com'SUBJECT='Test email ...
- ssm文件上传下载比较详细的案例
背景:ssm框架 接下来,我会介绍单文件上传,下载,多文件的上传,下载,使用ajax进行文件的上传下载,和普通的表单提交的文件上传下载. 只要做项目,总是少不了文件的操作,好了废话不多说,直接上代码! ...
- java 反射机制复习笔记。
1.java 反射的作用(好处): (1)能够使我们很方便的创建灵活的代码,这些代码可以在运行时装配(运行时获取一个类实例),就不用在组件之间进行源代码链接了,大大提高系统的灵活性和扩展性. (2)与 ...