思路:

$(x_0-x)^2+(y_0-y)^2<=x^2+y^2$

$y>=(-x_0/y_0)x+(x_0^2+y_0^2)/2y0$

这显然就是凸包了

以一个斜率不断向下(上)走  找到第一个接触到的点

离线可以用cdq分治一发 他左边的判一判是不是都符合在圆内

这不能离线就很难搞了

感觉自己代码能力捉鸡   写棵splay估计要调死

强烈安利二进制分组做法

非常强

在log个凸包上 二分一下斜率 判一判 就好了

//By SiriusRen
#include <bits/stdc++.h>
using namespace std;
const int N=;
const double pi=acos(-),eps=1e-;
int n,op,flg,tot,num,top,rec,size[];
struct Point{double x,y;Point(double X=,double Y=):x(X),y(Y){}}jy,lst[N],q[N];
Point operator-(Point a,Point b){return Point(a.x-b.x,a.y-b.y);}
double operator*(Point a,Point b){return a.x*b.y-a.y*b.x;}
bool operator<(Point a,Point b){return a.x==b.x?a.y<b.y:a.x<b.x;}
bool cmp(Point a,Point b){return (a-lst[])*(b-lst[])>-eps;}
vector<Point>vec[];vector<double>ang[];
void Tubao(){
for(int i=;i<=num;i++)if(lst[i]<lst[])swap(lst[],lst[i]);
sort(lst+,lst++num,cmp),top=;
for(int i=;i<=num;i++){
while(top>&&(lst[i]-q[top])*(q[top]-q[top-])>-eps)top--;
q[++top]=lst[i];
}
}
double A(double x){return x<=-pi/?x+*pi:x;}
void insert(Point p){
vec[++tot].push_back(p),size[tot]=,lst[num=]=p;
while(tot>&&size[tot]==size[tot-]){
for(int i=;i<vec[tot-].size();i++)lst[++num]=vec[tot-][i];
size[tot-]+=size[tot],size[tot]=,vec[tot].clear(),ang[tot].clear(),tot--;
}
Tubao(),vec[tot].clear(),ang[tot].clear();
if(top>){
for(int i=;i<top;i++)vec[tot].push_back(q[i]),ang[tot].push_back(A(atan2(q[i+].y-q[i].y,q[i+].x-q[i].x)));
vec[tot].push_back(q[top]),ang[tot].push_back(A(atan2(q[].y-q[top].y,q[].x-q[top].x)));
}
else vec[tot].push_back(q[]);
}
bool query(){
double angle;
angle=jy.y>?A(atan2(-jy.x,jy.y)):A(atan2(jy.x,-jy.y));
for(int i=;i<=tot;i++){
op=vec[i].size()==?:lower_bound(ang[i].begin(),ang[i].end(),angle)-ang[i].begin();
if(*jy.x*vec[i][op].x+*jy.y*vec[i][op].y-jy.x*jy.x-jy.y*jy.y<eps)return ;
}return ;
}
int main(){
scanf("%d",&n);
for(int i=;i<=n;i++){
scanf("%d%lf%lf",&op,&jy.x,&jy.y),jy.x+=rec,jy.y+=rec;
if(op==)flg=,insert(jy);
else flg&&query()?(puts("Yes"),rec++):puts("No");
}
}

BZOJ 4140 凸包+二进制分组的更多相关文章

  1. [BZOJ 2989]数列(二进制分组+主席树)

    [BZOJ 2989]数列(二进制分组+主席树) 题面 给定一个长度为n的正整数数列a[i]. 定义2个位置的graze值为两者位置差与数值差的和,即graze(x,y)=|x-y|+|a[x]-a[ ...

  2. bzoj 4398 福慧双修——二进制分组

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4398 如果枚举1号点走哪些点出去,就从那些点出发跑多源最短路即可.最短路不会重复经过一条边. ...

  3. bzoj 4398 福慧双修 —— 二进制分组+多起点最短路

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4398 按二进制每一位是 0/1 把 1 号点的儿子分成两组,分别作为起点和终点跑多起点最短路 ...

  4. 题解 bzoj 4398福慧双修(二进制分组)

    二进制分组,算个小技巧 bzoj 4398福慧双修 给一张图,同一条边不同方向权值不同,一条边只能走一次,求从1号点出发再回到1号点的最短路 一开始没注意一条边只能走一次这个限制,打了个从一号点相邻节 ...

  5. bzoj2961 共点圆 bzoj 4140

    题解: 比较水的一道题 首先我们化简一下式子发现是维护xxo+yyo的最值 显然是用凸包来做 我们可以直接用支持插入删除的凸包 也是nlogn的 因为没有强制在线,我们也可以cdq,考虑前面一半对答案 ...

  6. 【BZOJ3821/UOJ46】玄学(二进制分组,线段树)

    [BZOJ3821/UOJ46]玄学(二进制分组,线段树) 题面 BZOJ UOJ 题解 呜,很好的题目啊QwQ. 离线做法大概可以线段树分治,或者直接点记录左右两次操作时的结果,两个除一下就可以直接 ...

  7. 【BZOJ4140】共点圆加强版(二进制分组)

    [BZOJ4140]共点圆加强版(二进制分组) 题面 BZOJ 题解 我卡精度卡了一天.... 之前不强制在线的做法是\(CDQ\)分治,维护一个凸壳就好了. 现在改成二进制分组,每次重建凸壳就好了. ...

  8. 【BZOJ2989】数列(二进制分组,主席树)

    [BZOJ2989]数列(二进制分组,主席树) 题面 BZOJ 权限题啊... Description 给定一个长度为n的正整数数列a[i]. 定义2个位置的graze值为两者位置差与数值差的和,即g ...

  9. 【Codeforces710F】String Set Queries (强制在线)AC自动机 + 二进制分组

    F. String Set Queries time limit per test:3 seconds memory limit per test:768 megabytes input:standa ...

随机推荐

  1. mysql批量替换某个字段的部分内容

    举例说明 有数据表person,结构如下 id name urls 1 张三 xh.jpg 2 李四 xh.jpg 3 王五 3.jpg 需求:将urls字段中的xh替换为id字段的值 语句: UPD ...

  2. FJoi2017 1月20日模拟赛 交错和(等差数列+rmq)

    [题目描述] 无限循环数字串S由长度为n的循环节s构成.设s为12345(n=5),则数字串S为123451234512345… 设Si为S的第i位数字,在上面的例子中,S1=1,S2=2,S6=1. ...

  3. Prime Land(poj 1365)

    题意:这题题意难懂,看了题解才知道的.比如第二组sample,就是5^1*2^1=10, 求10-1即9的质因数分解,从大到小输出,即3^2.本来很简单的嘿,直接最快速幂+暴力最裸的就行了. #inc ...

  4. BZOJ(7) 1085: [SCOI2005]骑士精神

    1085: [SCOI2005]骑士精神 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3233  Solved: 1911[Submit][Stat ...

  5. Redis3.0集群方案分析

    在Redis3.0集群出来之前,大家都对作者antirez寄予厚望,因为Redis从来没有让我们失望过.现在Redis3.0集群出来了,网上出了很多评论文章,都说他的功能多么强大,包括下面这张图是彻底 ...

  6. 人人都是 DBA

    http://www.cnblogs.com/gaochundong/tag/DBA/

  7. sqlacodegen

    这个工具可以把数据库的表转成sqlalchemy用的class. 但是 table必须要有主键.否则转化成的是Table类型而不是class root@rijx:/tmp# sqlacodegen - ...

  8. Eclipse Java Build Path详解

    Eclipse Java Build Path详解 1.设置"source folder"与"output folder". * source folder:存 ...

  9. LeetCode 824. Goat Latin (山羊拉丁文)

    题目标签:String 首先把vowel letters 保存入 HashSet. 然后把S 拆分成 各个 word,遍历每一个 word: 当 word 第一个 字母不是 vowel 的时候,把第一 ...

  10. CentOS 7下安装Hadoop2.2

    这里就介绍CentOS的安装了,直接进入Hadoop2.2伪分布模式安装. 1.安装包下载 1.1.下载JDK1.7 眼下JDK的版本号是jdk1.8.0_25.这里下载的是jdk1.7.0_67. ...