假设当前询问点为$(A,B)$,那么它在一个以$(x,y)$为圆心的圆里需要满足:

$(x-A)^2+(y-B)^2\leq x^2+y^2$

$2Ax+2By\geq A^2+B^2$

等价于询问所有圆心与$(2A,2B)$的点积的最小值是否小于$A^2+B^2$。

考虑将修改操作二进制分组,分成$O(\log n)$段连续的修改区间,每一段建立上下凸壳维护,查询时在凸壳上三分。

时间复杂度$O(n\log^2n)$,常数很小。

#include<cstdio>
#include<algorithm>
#define N 500010
int n,m,op,t,q[30],r1[30],r2[30],flag;double A,B,C,D;
struct P{double x,y;}a[N],b[N],q1[N],q2[N];
inline bool cmp1(const P&a,const P&b){return a.x==b.x?a.y>b.y:a.x<b.x;}
inline bool cmp2(const P&a,const P&b){return a.x==b.x?a.y<b.y:a.x<b.x;}
inline void update(){
while(t&&m-q[t]==q[t]-q[t-1])t--;q[++t]=m;
int i,cnt=0,L=q[t-1]+1,R;
for(i=L;i<=m;i++)b[cnt++]=a[i];
std::sort(b,b+cnt,cmp1);
for(q1[R=L]=b[0],i=1;i<cnt;q1[++R]=b[i++])while(R>L&&(q1[R].y-q1[R-1].y)*(b[i].x-q1[R].x)<=(b[i].y-q1[R].y)*(q1[R].x-q1[R-1].x))R--;
r1[t]=R;
std::sort(b,b+cnt,cmp2);
for(q2[R=L]=b[0],i=1;i<cnt;q2[++R]=b[i++])while(R>L&&(q2[R].y-q2[R-1].y)*(b[i].x-q2[R].x)>=(b[i].y-q2[R].y)*(q2[R].x-q2[R-1].x))R--;
r2[t]=R;
}
inline double mul(const P&b){return A*b.x+B*b.y;}
inline void ask1(int l,int r){
int m1,m2;double s1,s2;
while(l<=r){
int len=(r-l)/3;
if((s1=mul(q1[m1=l+len]))<(s2=mul(q1[m2=r-len]))){
if(s1<C){flag=1;return;}
r=m2-1;
}else{
if(s2<C){flag=1;return;}
l=m1+1;
}
}
}
inline void ask2(int l,int r){
int m1,m2;double s1,s2;
while(l<=r){
int len=(r-l)/3;
if((s1=mul(q2[m1=l+len]))<(s2=mul(q2[m2=r-len]))){
if(s1<C){flag=1;return;}
r=m2-1;
}else{
if(s2<C){flag=1;return;}
l=m1+1;
}
}
}
inline void ask(){
flag=0;
for(int i=1;i<=t;i++){
if(B<0)ask1(q[i-1]+1,r1[i]);else ask2(q[i-1]+1,r2[i]);
if(flag)return;
}
}
int main(){
scanf("%d",&n);
while(n--){
scanf("%d%lf%lf",&op,&A,&B);A+=D,B+=D;
if(!op)a[++m].x=A,a[m].y=B,update();
else{
if(!m){puts("No");continue;}
C=A*A+B*B,A+=A,B+=B,ask();
if(flag)puts("No");else puts("Yes"),D++;
}
}
return 0;
}

  

BZOJ4140 : 共点圆加强版的更多相关文章

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

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

  2. bzoj2961&&bzoj4140 共点圆

    题目描述 在平面直角坐标系中,Wayne需要你完成n次操作,操作只有两种: 1.0 x y.表示在坐标系中加入一个以(x, y)为圆心且过原点的圆. 2.1 x y.表示询问点(x, y)是否在所有已 ...

  3. 【BZOJ2961】共点圆(CDQ分治)

    [BZOJ2961]共点圆(CDQ分治) 题面 BZOJ 题解 设询问点\((x,y)\),圆心是\((X,Y)\) 那么如果点在园内的话就需要满足 \((X-x)^2+(Y-y)^2\le X^2+ ...

  4. BZOJ2961: 共点圆

    好久没发了 CDQ分治,具体做法见XHR的论文… /************************************************************** Problem: 29 ...

  5. BZOJ2961 共点圆[CDQ分治]

    题面 bzoj 其实就是推一下圆的式子 长成这个样子 假设要查询的点是(x, y) 某个圆心是(p, q) \((x - p)^2 + (y - q)^2 \leq p^2 + q^2\) 变成 \( ...

  6. bzoj2961 共点圆 bzoj 4140

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

  7. bzoj2961 共点圆 (CDQ分治, 凸包)

    /* 可以发现可行的圆心相对于我们要查询的点是在一个半平面上, 然后我们要做的就是动态维护凸壳然后用这个半平面去切它 看看是否是在合法的那一面 然后cdq分治就可以了 代码基本是抄的, */ #inc ...

  8. 【bzoj2961】 共点圆

    http://www.lydsy.com/JudgeOnline/problem.php?id=2961 (题目链接) 题意 按照一定的顺序给出一些圆和一些点,对于每一个点问是否在所有圆内. Solu ...

  9. 【bzoj2961】共点圆 k-d树

    更新:此题我的代码设置eps=1e-8会WA,现在改为1e-9貌似T了 此题网上的大部分做法是cdq分治+凸包,然而我觉得太烦了,于是自己口胡了一个k-d树做法: 加入一个圆$(x,y)$,直接在k- ...

随机推荐

  1. Stanford机器学习---第三讲. 逻辑回归和过拟合问题的解决 logistic Regression & Regularization

    原文:http://blog.csdn.net/abcjennifer/article/details/7716281 本栏目(Machine learning)包括单参数的线性回归.多参数的线性回归 ...

  2. onfiguration problem: Unable to locate Spring NamespaceHandler for XML schema namespace [http://www.springframework.org/schema/security]

    org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Una ...

  3. BZOJ 1602 USACO2008 Oct 牧场行走

    翻翻吴大神的刷题记录翻到的... 乍一看是一个树链剖分吓瓜我...难不成吴大神14-10-28就会了树剖?orz... 再一看SB暴力都可过... 然后一看直接树上倍增码个就好了... 人生真是充满着 ...

  4. 搭建自己的SIP服务器:开源sip服务器opensips的搭建及终端TwInkle的使用

    搭建自己的SIP服务器:开源sip服务器opensips的搭建及终端TwInkle的使用 分类: linux编译相关2013-01-05 21:38 17983人阅读 评论(24) 收藏 举报 先下载 ...

  5. qcow2文件压缩

    qemu-img convert -O qcow2 /path/old.img.qcow2 /path/new.img.qcow2 转自:https://havee.me/linux/2011-09/ ...

  6. python基础——列表生成式

    python基础——列表生成式 列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式. 举个例子,要生成list [1, 2, 3, 4 ...

  7. hadoop中常见的问题

    一.在root下进行格式化 这样很糟糕 这样的话,若是第一次装的话,我的建议是将生成的文件都删掉,恢复到最开始的状态, 1. 首先你需要删除 vi conf/hdfs-site.xml   配置文件的 ...

  8. 用例视图 Use Case View(rose)

    找开Rose工具,选择用例视图  Use Case View 先看看这个视图下面都有哪些工具,都能做一些什么: 下面详细说一下: 用例视图下面有工具: 一:选择工具 二:文本框Text Box 三:注 ...

  9. WW_TRANS_I18N_LOCALE”与“WW_TRANS_I18N_LOCALE”属性

    Struts2 i18n国际化(允许用户自行选择语言)转最近在学习struts2,学习资料是李刚著的<struts2权威指南>,这本书写得非常好,非常有学习价值.我在学习过程中,自己跟着做 ...

  10. .net学习之类与对象、new关键字、构造函数、常量和只读变量、枚举、结构、垃圾回收、静态成员、静态类等

    1.类与对象的关系类是对一类事务的统称,是抽象的,不能拿来直接使用,比如汽车,没有具体指哪一辆汽车对象是一个具体存在的,看的见,摸得着的,可以拿来直接使用,比如我家的那辆刚刚买的新汽车,就是具体的对象 ...