bzoj2648/2716 kdtree
SJY摆棋子
Time Limit: 20 Sec Memory Limit: 128 MB
Submit: 5199 Solved: 1813
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
1 1
2 3
2 1 2
1 3 3
2 4 2
Sample Output
2
HINT
kdtree可以过
Source
#include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<cstdio> #define inf 1000000007
#define N 500007
#define ll long long
using namespace std;
inline int read()
{
int x=,f=;char ch=getchar();
while(ch<''||ch>''){if (ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=(x<<)+(x<<)+ch-'';ch=getchar();}
return x*f;
} int n,m,rt,F;
struct Node
{
int d[],mn[],mx[],l,r;
int& operator[](int x)
{
return d[x];
}
Node(int x=,int y=)//无代入的话x,y为0,代入即为代入值。
{
l=,r=;
d[]=x,d[]=y;
}
}p[N];
bool operator<(Node x,Node y)
{
return x[F]<y[F];
}
inline int dis(Node x,Node y)
{
return abs(x[]-y[])+abs(x[]-y[]);
}
struct kdtree
{
int ans;
Node tr[N*],T;
void update(int p)
{
Node l=tr[tr[p].l],r=tr[tr[p].r];
for (int i=;i<;i++)
{
if (tr[p].l)tr[p].mn[i]=min(tr[p].mn[i],l.mn[i]),tr[p].mx[i]=max(tr[p].mx[i],l.mx[i]);
if (tr[p].r)tr[p].mn[i]=min(tr[p].mn[i],r.mn[i]),tr[p].mx[i]=max(tr[p].mx[i],r.mx[i]);
}
}
int build(int l,int r,int now)
{
F=now;int mid=(l+r)>>;
nth_element(p+l,p+mid,p+r+);
tr[mid]=p[mid];
for (int i=;i<;i++)
tr[mid].mn[i]=tr[mid].mx[i]=tr[mid][i];
if (l<mid)tr[mid].l=build(l,mid-,now^);
if (r>mid)tr[mid].r=build(mid+,r,now^);
update(mid);
return mid;
}
void ins(int p,int now)
{
if (T[now]>=tr[p][now])
{
if(tr[p].r)ins(tr[p].r,now^);
else
{
tr[p].r=++n,tr[n]=T;
for (int i=;i<;i++)
tr[n].mn[i]=tr[n].mx[i]=tr[n][i];
}
}
else
{
if (tr[p].l)ins(tr[p].l,now^);
else
{
tr[p].l=++n,tr[n]=T;
for (int i=;i<;i++)
tr[n].mn[i]=tr[n].mx[i]=tr[n][i];
}
}
update(p);
}
int get(int k,Node p)
{
int tmp=;
for (int i=;i<;i++)
tmp+=max(,tr[k].mn[i]-p[i]);
for (int i=;i<=;i++)
tmp+=max(,p[i]-tr[k].mx[i]);
return tmp;
}
void query(int p,int now)
{
int d,dl=inf,dr=inf;
d=dis(tr[p],T);
ans=min(ans,d);
if (tr[p].l)dl=get(tr[p].l,T);
if (tr[p].r)dr=get(tr[p].r,T);
if (dl<dr)
{
if (dl<ans)query(tr[p].l,now^);
if (dr<ans)query(tr[p].r,now^);
}
else
{
if (dr<ans)query(tr[p].r,now^);
if (dl<ans)query(tr[p].l,now^);
}
}
int query(Node p)
{
ans=inf,T=p,query(rt,);
return ans;
}
void ins(Node p)
{
T=p;
ins(rt,);
}
}kd;
int main()
{
freopen("fzy.in","r",stdin);
freopen("fzy.out","w",stdout); n=read(),m=read();
for (int i=;i<=n;i++)
p[i][]=read(),p[i][]=read();
rt=kd.build(,n,);//后者0,代表维的循环
while(m--)
{
int flag=read(),x=read(),y=read();
if (flag==) kd.ins(Node(x,y));
else printf("%d\n",kd.query(Node(x,y)));
}
}
bzoj2648/2716 kdtree的更多相关文章
- 【BZOJ-2648&2716】SJY摆棋子&天使玩偶 KD Tree
2648: SJY摆棋子 Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 2459 Solved: 834[Submit][Status][Discu ...
- [bzoj2648/2716]SJY摆棋子_KD-Tree
SJY摆旗子 bzoj-2648 题目大意:平面上有n个黑子.有m个操作,可以下一颗白子,查询与曼哈顿距离下最近黑子之间的曼哈顿距离,或者下一颗黑子. 注释:$1\le n,m\le 5\cdot 1 ...
- [bzoj2648/2716]SJY摆棋子
平面上有n个点,要求支持插入一个点和查询一个点的最近点距离 n,m<=500000 用kdtree实现,但是复杂度貌似没法保证.....(莫名加了替罪羊重建更慢了...) #include< ...
- BZOJ2648/2716:SJY摆棋子/[Violet]天使玩偶(K-D Tree)
Description 这天,SJY显得无聊.在家自己玩.在一个棋盘上,有N个黑色棋子.他每次要么放到棋盘上一个黑色棋子,要么放上一个白色棋子,如果是白色棋子,他会找出距离这个白色棋子最近的黑色棋子. ...
- BZOJ 2716 [Violet 3]天使玩偶 ——KD-Tree
[题目分析] KD-Tree的例题.同BZOJ2648. [代码] #include <cstdio> #include <cstring> #include <cstd ...
- 【BZOJ】2648: SJY摆棋子 & 2716: [Violet 3]天使玩偶(kdtree)
http://www.lydsy.com/JudgeOnline/problem.php?id=2716 http://www.lydsy.com/JudgeOnline/problem.php?id ...
- BZOJ2648 SJY摆棋子(KD-Tree)
板子题. #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> # ...
- bzoj 2648: SJY摆棋子&&2716: [Violet 3]天使玩偶 --kdtree
2648: SJY摆棋子&&2716: [Violet 3]天使玩偶 Time Limit: 20 Sec Memory Limit: 128 MB Description 这天,S ...
- 【BZOJ2648】SJY摆棋子(KD-Tree)
[BZOJ2648]SJY摆棋子(KD-Tree) 题面 BZOJ Description 这天,SJY显得无聊.在家自己玩.在一个棋盘上,有N个黑色棋子.他每次要么放到棋盘上一个黑色棋子,要么放上一 ...
随机推荐
- vertx从入门到精通
1.Vert.x安装指南 http://blog.csdn.net/sdyy321/article/details/38926005 http://blog.csdn.net/chszs/articl ...
- 自己开发的在线视频下载工具,基于Java多线程
比如这个在线视频: 我们可以正常播放,但是找不到下载按钮. 打开Chrome开发者工具,在Network标签页里能看到很多网络传输请求: 随便看一个请求的响应,发现类型为video,大小为500多k. ...
- 目后佐道IT教育:师资团队
高端技术顾问 1. leepoor 拥有12年的Web开发和架构经验,在阿里巴巴担任高级架构师,参与阿里巴巴基础技术平台开发和www.alibaba.com架构设计.擅长大型网站技术架构,工作中经常使 ...
- (七)VMware Harbor 问题:Get https://192.168.3.135:8088/v2/: http:server gave HTTP response to HTTPS client
(一)问题描述 登陆时,报错 docker Get https://192.168.3.135:8088/v2/: http:server gave HTTP response to HTTPS cl ...
- idea 发布和本地测试问题
1.maven本地打包成jar 提示[错误: 找不到或无法加载主类]修改 配置maven ---->Runner---->VM Optins [-DarchetypeCatalog=loc ...
- 【Python】使用cmd模块构造一个带有后台线程的交互命令行界面
最近写一些测试工具,实在懒得搞GUI,然后意识到python有一个自带模块叫cmd,用了用发现简直是救星. 1. 基本用法 cmd模块很容易学到,基本的用法比较简单,继承模块下的Cmd类,添加需要的功 ...
- linux 常用命令(持续更新)
查看IP地址 ifconfig 查看TCP端口 netstat -ntlp vi 文本编辑 (1)进入vi编辑模式 在vi的默认模式中,直接在界面中输入: i 在光标所在位置开始编辑: a 在光标所在 ...
- vue父组件获取子组件页面的数组 以城市三级联动为例
父组件调用子组件 <Cselect ref="registerAddress"></Cselect> import Cselect from '../../ ...
- <MySQL>入门一 查询 DQL
1. 数据库表 1.1 员工表 Create Table CREATE TABLE `employees` ( `employee_id` ) NOT NULL AUTO_INCREMENT, `fi ...
- Django REST framework 的功能
1. 认证Authentication 方法一:在配置文件中配置全局默认的认证方案 REST_FRAMEWORK = { 'DEFAULT_AUTHENTICATION_CLASSES': ( 're ...