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();} ...
随机推荐
- linux 执行脚本
crontab -e 直接编辑定时脚本 保存后,在/var/spool/cron/下自动生成一个以用户名命名的脚本文件.
- 内存池技术(UVa 122 Tree on the level)
内存池技术就是创建一个内存池,内存池中保存着可以使用的内存,可以使用数组的形式实现,然后创建一个空闲列表,开始时将内存池中所有内存放入空闲列表中,表示空闲列表中所有内存都可以使用,当不需要某一内存时, ...
- 无用之flask
Oldboy s4 Flask Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收 ...
- 【HDOJ2586】【Tarjan离线求LCA】
http://acm.hdu.edu.cn/showproblem.php?pid=2586 How far away ? Time Limit: 2000/1000 MS (Java/Others) ...
- if else的使用以及如何从键盘获取数值
if-else的使用 顺序结构 顺序从上到下执行,中间没有判断和跳转 分支结构 根据条件,选择性地执行某段代码 有if-else和switch两种分支语句 循环结构 根据循环,重复性地执行某段代码 有 ...
- AtCoder Grand Contest 031 简要题解
AtCoder Grand Contest 031 Atcoder A - Colorful Subsequence description 求\(s\)中本质不同子序列的个数模\(10^9+7\). ...
- nginx日志格式配置
我一向对日志这个东西有些许恐惧,因为在分析日志是需要记住不同服务器日志的格式,就拿提取ip这一项来说,有的服务器日志是在第一列,有的是第二列或则第三列等等.知道今天我才发现,日志格式是可以自定义配置的 ...
- IO流的序列化和反序列化
序列化和反序列化的概念: 序列化:把对象转换为字节序列的过程称为对象的序列化.(常见的就是存文件) 反序列化:把字节序列恢复为对象的过程称为对象阿德反序列化. 序列化和反序列化的使用: java.io ...
- vorpal 又一个方便的cli 开发包
vorpal 是一个npm 包,我们可以用来开发专业的cli 程序 简单使用 初始化项目 yarn init -y 添加依赖 yarn add vorpal 简单demo app.js // cons ...
- 使用 loki grafana 分析nginx 请求日志
loki 是类似prometheus 的log 可视化展示.收集系统,已经集成在grafana 6.0 版本中了 说明: 测试环境使用了docker-compose 运行 环境准备 docker-co ...