bzoj 2648 SJY摆棋子——KDtree
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2648
第一道KDtree!
学习资料:https://blog.csdn.net/zhl30041839/article/details/9277807
https://www.cnblogs.com/galaxies/p/kdtree.html
这道题的代码是学习(抄)的这里的:https://blog.csdn.net/lych_cys/article/details/50809141
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=1e6+,INF=0x3f3f3f3f;
int n,m,fx,rt,ans,tot;
struct Node{
int x[],y[],p[];//x:min y:max p:ps
}a[N>>];
bool cmp(Node u,Node v){return u.p[fx]<v.p[fx];}
struct Kd{
int c[N][];Node s[N],q;//大家的儿子、根和唯一的询问
void add(int cr,Node k)
{ for(int i=;i<;i++) s[cr].x[i]=s[cr].y[i]=s[cr].p[i]=k.p[i];}
void pshp(int cr)
{
int ls=c[cr][],rs=c[cr][];
for(int i=;i<;i++)
{
if(ls)
s[cr].x[i]=min(s[cr].x[i],s[ls].x[i]),
s[cr].y[i]=max(s[cr].y[i],s[ls].y[i]);
if(rs)
s[cr].x[i]=min(s[cr].x[i],s[rs].x[i]),
s[cr].y[i]=max(s[cr].y[i],s[rs].y[i]);
}
}
void build(int &cr,int l,int r,int now)
{
int mid=l+r>>;fx=now;
nth_element(a+l,a+mid,a+r+,cmp);
// cr=mid;add(cr,a[mid]);//////cr=mid!
cr=++tot;add(cr,a[mid]);
if(l<mid)build(c[cr][],l,mid-,!now);///if()
if(mid<r)build(c[cr][],mid+,r,!now);
pshp(cr);
}
void insert(int &cr,int now)
{
// if(!cr){cr=++n;add(cr,q);return;}//cr=++n!
if(!cr){cr=++tot;add(cr,q);return;}
if(q.p[now]<s[cr].p[now])insert(c[cr][],!now);
else insert(c[cr][],!now);
pshp(cr);
}
int dist(int cr,Node k)//在区域内返回0
{
int ret=;
for(int i=;i<;i++)
ret+=max(,s[cr].x[i]-k.p[i])+max(,k.p[i]-s[cr].y[i]);
return ret;
}
void query(int cr,int now)
{
ans=min(ans,abs(s[cr].p[]-q.p[])+abs(s[cr].p[]-q.p[]));
int dl=c[cr][]?dist(c[cr][],q):INF,dr=c[cr][]?dist(c[cr][],q):INF;
if(dl<dr)
{ if(dl<ans)query(c[cr][],!now); if(dr<ans)query(c[cr][],!now);}
else
{ if(dr<ans)query(c[cr][],!now); if(dl<ans)query(c[cr][],!now);}
}
}kd;
int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)scanf("%d%d",&a[i].p[],&a[i].p[]);
kd.build(rt,,n,);
for(int i=,op;i<=m;i++)
{
scanf("%d%d%d",&op,&kd.q.p[],&kd.q.p[]);
if(op==) kd.insert(rt,);
else { ans=INF; kd.query(rt,); printf("%d\n",ans);}
}
return ;
}
bzoj 2648 SJY摆棋子——KDtree的更多相关文章
- BZOJ 2648: SJY摆棋子 kdtree
2648: SJY摆棋子 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=2648 Description 这天,SJY显得无聊.在家自己玩 ...
- BZOJ 2648 SJY摆棋子 ——KD-Tree
[题目分析] KD-Tree第一题,其实大概就是搜索剪枝的思想,在随机数据下可以表现的非常好NlogN,但是特殊数据下会达到N^2. 精髓就在于估价函数get以及按照不同维度顺序划分的思想. [代码] ...
- bzoj 2648: SJY摆棋子 KDtree + 替罪羊式重构
KDtree真的很妙啊,真的是又好写,作用还多,以后还需更多学习呀. 对于这道题,我们求的是曼哈顿距离的最小值. 而维护的变量和以往是相同的,就是横纵坐标的最小值与最大值. 我们设为一个极为巧妙且玄学 ...
- bzoj 2648: SJY摆棋子&&2716: [Violet 3]天使玩偶 --kdtree
2648: SJY摆棋子&&2716: [Violet 3]天使玩偶 Time Limit: 20 Sec Memory Limit: 128 MB Description 这天,S ...
- BZOJ 2648: SJY摆棋子
2648: SJY摆棋子 Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 2968 Solved: 1011[Submit][Status][Disc ...
- bzoj 2648: SJY摆棋子【KD-tree】
其实理论上cdq更优 核心是依次取x值.y值的mid作为当前节点,向两边递归建立二叉树,树上维护size:子树大小:mx[0/1]:子树内最大x/y:mn[0/1]:子树内最小x/y:d[0/1]:这 ...
- BZOJ 2648: SJY摆棋子(K-D Tree)
Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 6051 Solved: 2113[Submit][Status][Discuss] Descript ...
- bzoj 2648 SJY摆棋子 kd树
题目链接 初始的时候有一些棋子, 然后给两种操作, 一种是往上面放棋子. 另一种是给出一个棋子的位置, 问你离它最近的棋子的曼哈顿距离是多少. 写了指针版本的kd树, 感觉这个版本很好理解. #inc ...
- BZOJ 2648 SJY摆棋子(KD Tree)
http://www.lydsy.com/JudgeOnline/problem.php?id=2648 题意: 思路: KDtree模板题. 参考自http://www.cnblogs.com/ra ...
随机推荐
- web.xml配置中的log4jRefreshInterval
采用spring框架的项目如何使用log4j在spring中使用log4j,有些方便的地方, 1.动态的改变记录级别和策略,即修改log4j.properties,不需要重启web应用,这需要在web ...
- What Every Computer Scientist Should Know About Floating-Point Arithmetic
http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html
- iOS 邓白氏编码的申请
http://www.cocoachina.com/ios/20161214/18225.html
- Mysql 学习1
Mysql学习 一.数据库 1 数据库概念(了解) 1.1 什么是数据库 数据库就是用来存储和管理数据的仓库! 数据库存储数据的优先: 可存储大量数据: 方便检索: 保持数据的一致性.完整 ...
- Linux根目录下重要文件夹
bin存放系统命令的目录,普通用户和超级用户都可以执行,不过放在这里的命令在单用户模式下也可以执行 sbin保存和系统环境设置相关的命令,只有超级用户可以使用这些命令进行系统环境的设置,但有些命令可以 ...
- windows下安装PyQt4
第一步:确认自己电脑上的Python版本.然后下载对应的.whl文件下载 第二步:https://www.lfd.uci.edu/~gohlke/pythonlibs/#pyqt4上下载对应版本版本的 ...
- linux系统环境下搭建coreseek(+mmseg3) (good)
1.下载并解压coreseek软件,操作命令如下: wget http://www.coreseek.cn/uploads/csft/3.2/coreseek-3.2.14.tar.gz 说明:文件下 ...
- SAP 物料 移动类型
[转自 http://blog.sina.com.cn/s/blog_494f9a6b0102edf7.html] SAP 物料 移动类型 (2013-12-03 10:15:01) 转载▼ 分类 ...
- C# 汉字编码GB2312转换
功能界面 源码: using System; using System.Collections.Generic; using System.ComponentModel; using System.D ...
- NVM安装配置
http://www.kancloud.cn/summer/nodejs-install/71975 配置源 http://www.cnblogs.com/kaiye/p/4937191.html 安 ...