随机数据,带修改,求到空间中到给定点距离为给定值的点的编号,唯一解。

建三维kdtree,对查询用可行性剪枝在树上找,由于数据随机,插入删除时不需要维护平衡。

#include<bits/stdc++.h>
using namespace std;
typedef double ld;
const ld _0=1e-;
int n,m,res;
ld _a,_b,la=0.1,X[],R;
void mins(ld&a,ld b){if(a>b)a=b;}
void maxs(ld&a,ld b){if(a<b)a=b;}
ld f(ld x){return x=la*x+,_a*x-_b*sin(x);}
void $(ld&x){
ld L=-,R=;
while(R-L>1e-){
ld M=(L+R)*.;
f(M)<x?L=M:R=M;
}
x=(L+R)*.;
}
char ib[],*ip=ib;
int _(){
int x=;
while(*ip<)++ip;
while(*ip>)x=x*+*ip++-;
return x;
}
ld _Lf(){
ld x=;
bool f=;
while(*ip<)*ip++=='-'?f=:;
while(*ip>)x=x*+(*ip++-);
if(*ip=='.'){
ld a=.;
for(++ip;*ip>;x+=(*ip++-)*a,a*=.);
}
return f?-x:x;
}
ld max(ld a,ld b){return a>b?a:b;}
ld near(ld x,ld l,ld r){return x<l?l-x:max(x-r,);}
ld far(ld x,ld l,ld r){return max(r-x,x-l);}
ld dis(ld a,ld b,ld c){return a*a+b*b+c*c;}
struct node{
node*c[],*f;
ld x[],mn[],mx[];
int id;
bool chk1(){
return this
&& dis(near(X[],mn[],mx[]),near(X[],mn[],mx[]),near(X[],mn[],mx[]))<R+_0
&& dis( far(X[],mn[],mx[]), far(X[],mn[],mx[]), far(X[],mn[],mx[]))>R-_0;
}
bool chk2(){
return id&&fabs(dis(x[]-X[],x[]-X[],x[]-X[])-R)<_0;
}
void init(int ID,bool d){
id=ID;
for(int i=;i<;++i){
x[i]=_Lf();
if(d)$(x[i]);
mn[i]=mx[i]=x[i];
}
}
void up(){
if(id)for(int i=;i<;++i)mn[i]=mx[i]=x[i];
else for(int i=;i<;++i)mn[i]=1e10,mx[i]=-1e10;
for(int i=;i<;++i)if(c[i]){
c[i]->f=this;
if(c[i]->mn[]>c[i]->mx[])c[i]=;
else for(int j=;j<;++j){
mins(mn[j],c[i]->mn[j]);
maxs(mx[j],c[i]->mx[j]);
}
}
}
}ns[],*np=ns,*rt,*nr[];
int D=;
bool operator<(const node&a,const node&b){
return a.x[D]<b.x[D];
}
node*build(node*l,node*r){
if(l==r)return ;
node*m=l+(r-l>>);
nth_element(l,m,r);
D=(D+)%;
m->c[]=build(l,m);
m->c[]=build(m+,r);
m->up();
D=(D+)%;
return m;
}
void ins(node*w,node*a,int D){
int d=a->x[D]>w->x[D];
if(w->c[d])ins(w->c[d],a,(D+)%);
else w->c[d]=a;
w->up();
}
bool find(node*w){
if(!w->chk1())return ;
if(w->chk2())return res=w->id,;
return find(w->c[])||find(w->c[]);
}
int main(){
fread(ib,,sizeof(ib),stdin);
n=_(),m=_(),_a=_Lf(),_b=_Lf();
for(int i=;i<=n;++i)np++->init(i,);
rt=build(ns,np);
for(node*a=ns;a!=np;++a)nr[a->id]=a;
while(m--){
int op=_();
if(op){
X[]=_Lf();
X[]=_Lf();
X[]=_Lf();
R=_Lf();
$(X[]),$(X[]),$(X[]),$(R);
R*=R;
find(rt);
la=res;
printf("%d\n",res);
}else{
ld _id=_Lf();
$(_id);
int id=round(_id);
node*u=nr[id];
for(u->id=;u;u->up(),u=u->f);
np->init(id,);
ins(rt,nr[id]=np++,);
}
}
return ;
}

bzoj3815: 卡常数的更多相关文章

  1. Interesting卡常数

    C++ Interesting卡常数 作为一名OIer,在Noip中卡(kǎ 我就爱读kǎ)常数可以说是必备技巧.在此总结一下我所知卡常数的神奇手法: IO优化 fread 和 fwrite ,如果还 ...

  2. CF 86D 莫队(卡常数)

    CF 86D 莫队(卡常数) D. Powerful array time limit per test 5 seconds memory limit per test 256 megabytes i ...

  3. NOIP卡常数技巧

    NOIP卡常数技巧 https://blog.csdn.net/a1351937368/article/details/78162078 http://www.mamicode.com/info-de ...

  4. ACM卡常数(各种玄学优化)

    首先声明,本博文部分内容仅仅适用于ACM竞赛,并不适用于NOIP与OI竞赛,违规使用可能会遭竞赛处理,请慎重使用!遭遇任何情况都与本人无关哈=7= 我也不想搞得那么严肃的,但真的有些函数在NOIP与O ...

  5. HDU 6211 卡常数取模 预处理 数论

    求所有不超过1e9的 primitive Pythagorean triple中第2大的数取模$2^k$作为下标,对应a[i]数组的和. 先上WIKI:https://en.wikipedia.org ...

  6. 【UER #1】DZY Loves Graph(待卡常数)

    题解: 正解是可持久化并查集 但这个显然是lct可以维护的 但这常数是个问题啊??? #include <bits/stdc++.h> using namespace std; struc ...

  7. HDU-5373-水题-卡常数时间

    姿势就是力量啊! 第一次意识到long long 比 int要慢很多.当时想到了各种优化仍然TLE,最后也没A出来,就是用了long long #include <cstdio> #inc ...

  8. Vijos p1892 树上的最大匹配 树形DP+计数 被卡常我有特殊技巧heheda

    https://vijos.org/p/1892 此题需要手动开栈: <<; //256MB char *p=(char*)malloc(size)+size; __asm__(" ...

  9. OI中卡常数技巧

    一.I/O优化 读入优化是卡常数最重要的一条! inline int read() { ,f=;char c=getchar(); ;c=getchar();} +c-';c=getchar();} ...

随机推荐

  1. 一次scrapy失败的提示信息:由于连接方在一段时间后没有正确答复或连接的主机没有反 应,连接尝试失败

    2017-10-31 19:09:26 [scrapy.extensions.logstats] INFO: Crawled 8096 pages (at 67 pages/min), scraped ...

  2. C++ 作业(哈夫曼树)

    #include<bits/stdc++.h> #define fi first #define se second #define int long long using namespa ...

  3. hdu3336 Count the string 扩展KMP

    It is well known that AekdyCoin is good at string problems as well as number theory problems. When g ...

  4. Go Example--缓存通道

    package main import "fmt" func main() { //缓存通道 msg := make(chan string,2) msg <- " ...

  5. UVA10294 Arif in Dhaka (First Love Part 2)

    题意 PDF 分析 用n颗宝石串成项链和手镯, 每颗宝石的颜色可以t种颜色中的一种,当A类项链经过旋转得B类项链时,A和B属于一类项链, 而手镯不仅可以旋转还可以翻转,当A类手镯经过翻转得得到B类手镯 ...

  6. 新安装的win7/win10系统,所有驱动都没安装,插入U盘也无法识别解决方法

    我是使用老毛挑安装的系统,结果安装好之后,才发现所有驱动都没有安装,例如usb,网卡驱动等 解决方法就是先把驱动下载到系统安装盘里面,然后再次进入安装系统界面,相当于重新安装系统,但实际上我们不需要. ...

  7. linux面试题(自己添加了一些注释说明)

    1.linux如何挂在windows下的共享目录 首先需要在Windows中创建一个文件夹用来共享,例如下面就是server是用来共享的,貌似在哪个位置创建都可以,我是在d盘创建的 1 mount.c ...

  8. Using C++ new() placement in embedded system

    For new(), there are three definition in C++11, which are listed below. throwing (1) void* operator ...

  9. 普林斯顿数学指南(第三卷) (Timothy Gowers 著)

    第V部分 定理与问题 V.1 ABC猜想 V.2 阿蒂亚-辛格指标定理 V.3 巴拿赫-塔尔斯基悖论 V.4 Birch-Swinnerton-Dyer 猜想 V.5 卡尔松定理 V.6 中心极限定理 ...

  10. C/S架构程序多种类服务器之间实现单点登录

    (一) 在项目开发的过程中,经常会出现这样的情况:我们的产品包括很多,以QQ举例,如登陆.好友下载.群下载.网络硬盘.QQ游戏.QQ音乐等,总不能要求用户每次输入用户名.密码吧,为解决这个问题,高手提 ...