好久没发了

CDQ分治,具体做法见XHR的论文…

 /**************************************************************
Problem: 2961
User: zhuohan123
Language: C++
Result: Accepted
Time:5060 ms
Memory:41704 kb
****************************************************************/ #include <iostream>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const double eps=1e-,inf=1e12;
struct point
{
double x,y;
point(){x=y=;}
point(double X,double Y){x=X,y=Y;}
friend bool operator<(point a,point b)
{
if(abs(a.x-b.x)<eps)return a.y+eps<b.y;
else return a.x+eps<b.x;
}
};
inline point V(point s,point e){return point(e.x-s.x,e.y-s.y);}
inline double crossP(point a,point b){return a.x*b.y-b.x*a.y;}
inline double dotP(point a,point b){return a.x*b.x+a.y*b.y;}
struct T{int ispo;point o;}q[];
point t[];int tnum;
point up[];int unum;
point dw[];int dnum;
bool ans[];
void imerge(int l,int r)
{
if(l==r)return ;
int mid=(l+r)/;
imerge(l,mid);imerge(mid+,r);
tnum=;
for(int i=l;i<=mid;i++)
if(!q[i].ispo)t[++tnum]=q[i].o;
sort(t+,t+tnum+);
unum=;
for(int i=;i<=tnum;i++)
{
while(unum>&&crossP(V(up[unum-],up[unum]),V(up[unum],t[i]))>-eps)unum--;
up[++unum]=t[i];
}
up[unum+].x=up[unum].x+eps;up[unum+].y=-inf;
dnum=;
for(int i=tnum;i;i--)
{
while(dnum>&&crossP(V(dw[dnum-],dw[dnum]),V(dw[dnum],t[i]))>-eps)dnum--;
dw[++dnum]=t[i];
}
dw[dnum+].x=dw[dnum].x-eps;dw[dnum+].y=inf;
if(tnum!=)
for(int i=mid+;i<=r;i++)
if(q[i].ispo&&ans[i])
{
point near;
if(q[i].o.y<)
{
int L=,R=unum;
while(L<=R)
{
int Mid=(L+R)/;
if(dotP(q[i].o,V(up[Mid],up[Mid+]))>-eps)near=up[Mid],R=Mid-;
else L=Mid+;
}
}
else
{
int L=,R=dnum;
while(L<=R)
{
int Mid=(L+R)/;
if(dotP(q[i].o,V(dw[Mid+],dw[Mid]))<eps)near=dw[Mid],R=Mid-;
else L=Mid+;
}
}
if(*near.x*q[i].o.x+*near.y*q[i].o.y-q[i].o.x*q[i].o.x-q[i].o.y*q[i].o.y<eps)ans[i]=false;
}
}
int main(int argc, char *argv[])
{
//freopen("1.in","r",stdin);
//freopen("1.out","w",stdout);
int n;scanf("%d",&n);
for(int i=;i<=n;i++)
{
scanf("%d%lf%lf",&q[i].ispo,&q[i].o.x,&q[i].o.y);
if(q[i].ispo)ans[i]=true;
}
for(int i=;i<=n&&q[i].ispo;i++)ans[i]=false;
imerge(,n);
for(int i=;i<=n;i++)
if(q[i].ispo)puts(ans[i]?"Yes":"No");
return ;
}

BZOJ2961: 共点圆的更多相关文章

  1. BZOJ2961 共点圆[CDQ分治]

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

  2. bzoj2961 共点圆 bzoj 4140

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

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

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

  4. BZOJ2961: 共点圆(CDQ分治+凸包)

    题面 传送门 题解 这题解法真是多啊--据说可以圆反演转化为动态插入半平面并判断给定点是否在半平面交中,或者化一下改成给定点判断是否所有点都在某一个半平面内-- 鉴于圆反演我也不会,这里讲一下直接推的 ...

  5. [BZOJ2961]共点圆-[凸包+cdq分治]

    Description 传送门 Solution 考虑对于每一个点: 设圆的坐标为(x,y),点的坐标为(x0,y0).依题意得,当一个点在圆里,需要满足(x-x0)2+(y-y0)2<=x2+ ...

  6. [BZOJ2961] 共点圆 [cdq分治+凸包]

    题面 BZOJ传送门 思路 首先考虑一个点$(x_0,y_0)$什么时候在一个圆$(x_1,y_1,\sqrt{x_1^2+y_1^2})$内 显然有:$x_1^2+y_1^2\geq (x_0-x_ ...

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

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

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

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

  9. 【bzoj2961】 共点圆

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

随机推荐

  1. 对于java反射的理解

    java中的反射是一种强大的工具,它能够创建灵活的代码,这些代码可以在运行时装配,无序在组件之间进行链接. 反射允许在编写与执行时,使程序代码能够接入装载到JVM的类的内部信息,而不是源代码中选定的类 ...

  2. 使用 Attribute +反射 来对两个类之间动态赋值

    看同事使用的 一个ORM 框架 中 有这样一个功能  通过特性(附加属性)的功能来 实现的两个类对象之间动态赋值的 功能 觉得这个功能不错,但是同事使用的 ORM 并不是我使用的  Dapper  所 ...

  3. [terry笔记]物化视图 materialized view基础学习

    一.物化视图定义摘录:     物化视图是包括一个查询结果的数据库对像(由系统实现定期刷新数据),物化视图不是在使用时才读取,而是预先计算并保存表连接或聚集等耗时较多的操作结果,这样在查询时大大提高了 ...

  4. openstack的第二天

    今天,在公司测试了还是网络有问题. 但是用了rdo还是成功了~明天就再试试怎么开放端口进来.

  5. EMVTag系列5《8E 持卡人验证方法(CVM)列表》

    L: var. up to 252 -R(需求):数据必须存在,在读应用数据过程中,终端不检查 按照优先顺序列出卡片应用支持的所有持卡人验证方法 注:一个应用中可以有多个CVM列表,例如一个用于国内交 ...

  6. VBA在WORD中给表格外的字体设置为标题

    使用VB可以将表外的字体设置标题字体实际操作如下: VB代码如下: Sub oliver_1() Selection.EndKey Unit:=wdStory '光标移到文末 To ActiveDoc ...

  7. ORA-01207: file is more recent than control file -

    OS: [root@yoon ~]# more /etc/oracle-releaseOracle Linux Server release 5.7 DB: Oracle Database 11g E ...

  8. xUtils框架的介绍(一)

    微信账号申请终于通过了,这是我们第一次Android干货分享. 想来是第一次,要对得起“干货”二字. 今天我要为大家推荐的是一个Android基于快速开发的一个框架——xUtils, 它是在aFina ...

  9. EF 随机排序

    /// <summary> /// 数据上下文扩展 /// </summary> public partial class dbDataContext : IUnitOfWor ...

  10. Windows 10 IoT Core Samples

    Windows 10 IoT Core Samples Welcome to the Windows 10 IoT Core Samples These samples have been valid ...