bzoj3815: 卡常数
随机数据,带修改,求到空间中到给定点距离为给定值的点的编号,唯一解。
建三维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: 卡常数的更多相关文章
- Interesting卡常数
C++ Interesting卡常数 作为一名OIer,在Noip中卡(kǎ 我就爱读kǎ)常数可以说是必备技巧.在此总结一下我所知卡常数的神奇手法: IO优化 fread 和 fwrite ,如果还 ...
- CF 86D 莫队(卡常数)
CF 86D 莫队(卡常数) D. Powerful array time limit per test 5 seconds memory limit per test 256 megabytes i ...
- NOIP卡常数技巧
NOIP卡常数技巧 https://blog.csdn.net/a1351937368/article/details/78162078 http://www.mamicode.com/info-de ...
- ACM卡常数(各种玄学优化)
首先声明,本博文部分内容仅仅适用于ACM竞赛,并不适用于NOIP与OI竞赛,违规使用可能会遭竞赛处理,请慎重使用!遭遇任何情况都与本人无关哈=7= 我也不想搞得那么严肃的,但真的有些函数在NOIP与O ...
- HDU 6211 卡常数取模 预处理 数论
求所有不超过1e9的 primitive Pythagorean triple中第2大的数取模$2^k$作为下标,对应a[i]数组的和. 先上WIKI:https://en.wikipedia.org ...
- 【UER #1】DZY Loves Graph(待卡常数)
题解: 正解是可持久化并查集 但这个显然是lct可以维护的 但这常数是个问题啊??? #include <bits/stdc++.h> using namespace std; struc ...
- HDU-5373-水题-卡常数时间
姿势就是力量啊! 第一次意识到long long 比 int要慢很多.当时想到了各种优化仍然TLE,最后也没A出来,就是用了long long #include <cstdio> #inc ...
- Vijos p1892 树上的最大匹配 树形DP+计数 被卡常我有特殊技巧heheda
https://vijos.org/p/1892 此题需要手动开栈: <<; //256MB char *p=(char*)malloc(size)+size; __asm__(" ...
- OI中卡常数技巧
一.I/O优化 读入优化是卡常数最重要的一条! inline int read() { ,f=;char c=getchar(); ;c=getchar();} +c-';c=getchar();} ...
随机推荐
- xdoj-1117(记忆化搜索+组合数学)
因为我是从上到下,所以就不叫动态规划而叫记忆化搜索吧 (不过运行时间只有3ms....应该是很不错的吧) 排版怎么那么难看...编辑的时候不是这样子的啊?! 思想 : 大眼一看应该是一道很裸的状压dp ...
- hdu2609 How many 字典树+最小表示法
Give you n ( n < 10000) necklaces ,the length of necklace will not large than 100,tell meHow many ...
- 深入学习Motan系列(一)——入门及知识zookeeper储备
背景以及说明: 最近逮到个RPC框架,打算深入学习,框架千千万,只有懂得内部原理,才能应对复杂的业务,进行自定义化系统. 这个系列的Motan文章也是自己慢慢摸索的轨迹,将这个过程记录下来,一是提升自 ...
- pageContext中page、request、session、application四种范围变量的用法。
在PageContext中有很多作用域 第一种:PageContext.PAGE_SCOPE适用于当前页面的作用域,其接受数据的代码是pageContext.getAttribute();访问页面也是 ...
- 【shell编程】之基础知识-语法
一.shell变量 1.定义变量 定义变量时,变量名不加美元符号($,PHP语言中变量需要), 如: your_name="runoob.com" 注意,变量名和等号之间不能有空格 ...
- redis源码之压缩列表ziplist
压缩列表ziplist1.简介连续,无序的数据结构.压缩列表是 Redis 为了节约内存而开发的, 由一系列特殊编码的连续内存块组成的顺序型(sequential)数据结构. 2.组成 属性 类型 长 ...
- 几张简单的terraform flow 图——可以快速了解terraform的使用
以下是一个简单额terraform flow 我们快速的了解terraform 的使用,基于流程 参考图 参考架构 简单使用流程 说明 从上图我们可以看出terraform 的使用 tf 内容编写 定 ...
- [转]Java之JMX 详解
一.JMX简介 JMX是一种JAVA的正式规范,它主要目的是让程序有被管理的功能,那么怎么理解所谓的“被管理”呢?试想你开发了一个软件(如WEB网站),它是在24小时不间断运行的,那么你可能会想要“监 ...
- MySQL 数据类型对比:char 与 varchar;varchar 与 text;datetime 与 timestamp;blob 与 text;
char 与 varchar char(n) 若存入字符数小于n,则以空格补于其后,查询之时再将空格去掉.所以 char 类型存储的字符串末尾不能有空格,varchar 不限于此. char(n) 固 ...
- react-router、react-router-dom、react-router-native 关系
react-router 为 React Router 提供核心路由功能,但是你不需要直接安装 react-router: 如果你写浏览器端应用,你应该安装 react-router-dom: 如果你 ...