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

题面

BZOJ

题解

我卡精度卡了一天。。。。

之前不强制在线的做法是\(CDQ\)分治,维护一个凸壳就好了。

现在改成二进制分组,每次重建凸壳就好了。。

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<vector>
using namespace std;
#define ll long long
#define MAX 500500
#define Sqr(x) ((x)*(x))
#define pb push_back
struct Node{double x,y;}a[MAX];
bool operator<(Node a,Node b){if(a.x==b.x)return a.y<b.y;return a.x<b.x;}
inline double Slope(Node a,Node b)
{
if(a.x==b.x)return a.y>b.y?1e18:-1e18;
return (a.y-b.y)/(a.x-b.x);
}
int n,ans,top;
struct Group
{
vector<Node> p,Q;
int tot,tp;
void insert(Node x){++tot;p.pb(x);}
void clear(){p.clear();Q.clear();tot=tp=0;}
void Build()
{
sort(p.begin(),p.end());
tp=1;Q.clear();Q.pb(p[0]);
for(int i=1;i<tot;++i)
{
while(tp>1&&Slope(Q[tp-1],Q[tp-2])-Slope(Q[tp-1],p[i])>=0)--tp,Q.pop_back();
Q.pb(p[i]),++tp;
}
}
bool Query(double x,double y)
{
double k=-x/y;int l=1,r=tp-1,ret=0;
while(l<=r)
{
int mid=(l+r)>>1;
if(k>=Slope(Q[mid],Q[mid-1]))l=mid+1,ret=mid;
else r=mid-1;
}
return 2*x*Q[ret].x+2*y*Q[ret].y>=x*x+y*y;
}
}B[50];
void insert(double x,double y)
{
B[++top].insert((Node){x,y});
while(top>1&&B[top].tot==B[top-1].tot)
{
for(int i=0;i<B[top].tot;++i)
B[top-1].insert(B[top].p[i]);
B[top--].clear();
}
B[top].Build();
}
bool Query(double x,double y)
{
if(!top)return false;
for(int i=1;i<=top;++i)
if(!B[i].Query(x,y))return false;
return true;
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;++i)
{
int opt;double x,y;
scanf("%d%lf%lf",&opt,&x,&y);
x+=ans;y+=ans;
if(!opt)insert(x,y);
else if(Query(x,y))++ans,puts("Yes");else puts("No");
}
return 0;
}

【BZOJ4140】共点圆加强版(二进制分组)的更多相关文章

  1. BZOJ4140 : 共点圆加强版

    假设当前询问点为$(A,B)$,那么它在一个以$(x,y)$为圆心的圆里需要满足: $(x-A)^2+(y-B)^2\leq x^2+y^2$ $2Ax+2By\geq A^2+B^2$ 等价于询问所 ...

  2. bzoj2961&&bzoj4140 共点圆

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

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

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

  4. BZOJ2989 数列(二进制分组)

    这题其实可以cdq分治做,但是如果强制在线的话,这里有个牛逼方法叫二进制分组. 它的基本思想是把修改操作按二进制分组,遇到修改就在尾部加一个,并与之前的合并,比如之前有23(16+4+2+1)个,加了 ...

  5. bzoj2961 共点圆 bzoj 4140

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

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

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

  7. bzoj2989&&4170数列——二进制分组+主席树

    题意的转化挺巧妙的 可以联想到曼哈顿距离! 并且,所谓的修改还要查询历史版本,并且修改之间不动只算一次,不就是给平面上加一个点吗? 看成(x,a[x])的点 就是一个菱形区域 转切比雪夫距离,变成矩形 ...

  8. CodeForces - 710F:String Set Queries (二进制分组 处理 在线AC自动机)

    ou should process m queries over a set D of strings. Each query is one of three kinds: Add a string ...

  9. 2019.01.21 bzoj2989: 数列(二进制分组+主席树)

    传送门 二进制分组入门题. 主席树写错调题2h+2h+2h+体验极差. 题意简述:给一堆点,支持加入一个点,询问有多少个点跟(x,y)(x,y)(x,y)曼哈顿距离不超过kkk. 思路:题目要求的是对 ...

随机推荐

  1. Unity面试技巧之C#基础

    1. 定义常量最好使用运行是常量就是readonly 编译常量就是 const public static readonly MyClass myClass = new MyClass(); publ ...

  2. SICP读书笔记 3.1

    SICP CONCLUSION 让我们举起杯,祝福那些将他们的思想镶嵌在重重括号之间的Lisp程序员 ! 祝我能够突破层层代码,找到住在里计算机的神灵! 目录 1. 构造过程抽象 2. 构造数据抽象 ...

  3. vue mock(模拟后台数据) 最简单实例(一)——适合小白

    开发是前后端分离,不需要等待后台开发.前端自己模拟数据,经本人测试成功. 我们在根目录新建存放数据的json文件,存放我们的数据data.json //data.json{ "status& ...

  4. List集合中的对象进行排序

    类A: public class A implements Comparable<A>{ private Integer id; private String name; public A ...

  5. Vue Cli 中使用 Karma / Chrome 执行样式相关单元测试

    在 GearCase 开源项目 中,我使用了 Vue Cli 的默认测试框架.因此和样式相关的东西,都无法进行测试.因为它并不类似于无头浏览器,而是存在于虚拟内存之中. 现状 在如下 button.s ...

  6. DNS分离解析IPV6与IPV4用户

    IPV6改造中经常会遇到,网站使用了CDN,但是CDN厂商还不支持IPV6的情况,而AAAA.A.CNAME记录互相冲突,想实现IPV6用户得到AAAA记录,IPV4用户得到CNAME记录的需求. 解 ...

  7. Centos7下使用RDO方式安装openstack-r版

    一.前言 OpenStack是一个开源的云计算管理平台项目,OpenStack支持几乎所有类型的云环境,项目目标是提供实施简单.可大规模扩展.丰富.标准统一的云计算管理平台.OpenStack通过各种 ...

  8. django orm 操作表

    django orm 操作表 1.基本操作 增 models.Tb1.objects.create(c1='xx', c2='oo') 增加一条数据,可以接受字典类型数据 **kwargs inser ...

  9. FirstWebApp

    servlet规范中定义了web应用程序的目录层次:http://localhost:8080/docs/appdev/deployment.html 第一个web应用程序 开发,并部署到tomcat ...

  10. ACM中常见错误提示解析

    Output Limit Exceeded 多数发生在递归遍历的过程中,多输出了一些内容(比如说空格).Output Limit Exceeded还指如果输入某一组数据,你的程序返回的结果是一直输出某 ...