bzoj 2648: SJY摆棋子&&2716: [Violet 3]天使玩偶 --kdtree
2648: SJY摆棋子&&2716: [Violet 3]天使玩偶
Time Limit: 20 Sec Memory Limit: 128 MB
Description
Input
Output
Sample Input
1 1
2 3
2 1 2
1 3 3
2 4 2
Sample Output
2
HINT
kdtree可以过
Source
照着zgz233打了一遍板子qaq
#include<map>
#include<cmath>
#include<queue>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define inf 1000000007
#define ll long long
#define N 1000010
inline int rd()
{
int x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
}
struct qaz
{
int d[],mn[],mx[],l,r;
int& operator[](int x){return d[x];}
}p[N],tr[N],T;
int D;
bool operator <(qaz a,qaz b){return a[D]<b[D];}
int rt;
#define ls tr[x].l
#define rs tr[x].r
inline void upd(int x)
{
for(int i=;i<;i++)
{
if(ls) tr[x].mn[i]=min(tr[x].mn[i],tr[ls].mn[i]),tr[x].mx[i]=max(tr[x].mx[i],tr[ls].mx[i]);
if(rs) tr[x].mn[i]=min(tr[x].mn[i],tr[rs].mn[i]),tr[x].mx[i]=max(tr[x].mx[i],tr[rs].mx[i]);
}
}
int build(int l,int r,int t)
{
D=t;
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-,t^);
if(mid<r) tr[mid].r=build(mid+,r,t^);
upd(mid);return mid;
}
int n,m;
void ins(int x,int t)
{
if(T[t]<tr[x][t])
{
if(ls) ins(ls,t^);
else{ls=++n,tr[n]=T;}
}
else
{
if(rs) ins(rs,t^);
else{rs=++n,tr[n]=T;}
}
upd(x);
}
int ans;
int dis(qaz a,qaz b){return abs(a[]-b[])+abs(a[]-b[]);}
int gtdis(qaz a,qaz b)
{
int ji=;
for(int i=;i<;i++)
ji+=max(,b.mn[i]-a[i])+max(,a[i]-b.mx[i]);
return ji;
}
void fd(int x,int t)
{
int d=dis(tr[x],T),dl=inf,dr=inf;
ans=min(d,ans);
if(ls) dl=gtdis(T,tr[ls]);
if(rs) dr=gtdis(T,tr[rs]);
if(dl<dr)
{
if(dl<ans) fd(ls,t^);
if(dr<ans) fd(rs,t^);
}
else
{
if(dr<ans) fd(rs,t^);
if(dl<ans) fd(ls,t^);
}
}
int main()
{
n=rd();m=rd();
for(int i=;i<=n;i++) p[i][]=rd(),p[i][]=rd();
rt=build(,n,);
int op,x,y;
while(m--)
{
T.l=T.r=;op=rd();
T.mn[]=T.mx[]=T[]=rd();
T.mn[]=T.mx[]=T[]=rd();
if(op==) ins(rt,);
else
{
ans=inf;
fd(rt,);
printf("%d\n",ans);
}
}
return ;
}
bzoj 2648: SJY摆棋子&&2716: [Violet 3]天使玩偶 --kdtree的更多相关文章
- 【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摆棋子&&2716: [Violet 3]天使玩偶
BZOJ2648: SJY摆棋子 BZOJ2716: [Violet 3]天使玩偶 BZOJ氪金无极限... 其实这两道是同一题. 附上2648的题面: Description 这天,SJY显得无聊. ...
- bzoj2648SJY摆棋子&&bzoj2716[Violet 3]天使玩偶*
bzoj2648SJY摆棋子 bzoj2716[Violet 3]天使玩偶 题意: 棋盘上有n个棋子,现在有m个操作,一种是加棋子,一种是查询离某个点最近的棋子.n,m≤500000. 题解: 先将已 ...
- BZOJ 2648: SJY摆棋子
2648: SJY摆棋子 Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 2968 Solved: 1011[Submit][Status][Disc ...
- BZOJ 2648: SJY摆棋子 kdtree
2648: SJY摆棋子 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=2648 Description 这天,SJY显得无聊.在家自己玩 ...
- 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 ...
- BZOJ 2648 SJY摆棋子(KD树)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2716 [题目大意] 给出一些点,同时不断插入点和询问某点离插入点最近距离 [题解] 我 ...
随机推荐
- Spring RedisTemplate操作-xml配置(1)
网上没能找到全的spring redistemplate操作例子,故特意化了点时间做了接口调用练习,基本包含了所有redistemplate方法. 该操作例子是个系列,该片为spring xml配置, ...
- jdk1.8.0_45源码解读——Map接口和AbstractMap抽象类的实现
jdk1.8.0_45源码解读——Map接口和AbstractMap抽象类的实现 一. Map架构 如上图:(01) Map 是映射接口,Map中存储的内容是键值对(key-value).(02) A ...
- [整理]ASP.NET MVC 5
1.入门 1.1官方资料 http://www.asp.net/mvc/overview/getting-started/introduction/getting-started 疑问: startu ...
- javascript的单例/单体模式(Singleton)
首先,单例模式是对象的创建模式之一,此外还包括工厂模式.单例模式的三个特点:1,该类只有一个实例2,该类自行创建该实例(在该类内部创建自身的实例对象)3,向整个系统公开这个实例接口 Java中大概是这 ...
- J2EE简介
一,J2EE概念: J2EE的全称为,Java2 Platform Enterprise Edition,Java或java2平台企业版,他是基于java平台或java2平台的标准版,保留并扩展了J2 ...
- Anaconda+django写出第一个web app(十一)
今天我们来学习给页面添加一个Sidebar,根据Sidebar跳转到相应的tutorial. 打开views.py,编辑single_slug函数: def single_slug(request, ...
- 叉积(POJ - 2318 )
题目链接:https://cn.vjudge.net/contest/276358#problem/A 题目大意:给你一个矩阵的左上角和右下角,然后n个竖杠,这n个竖杠将这个矩阵分成n+1个方块,给你 ...
- 基于滑动窗口协议写的程序(UDP实现) .
正好有一个大作业关于用socket实现滑动窗口协议,所以写了一个,模拟接收方与发送方窗口都是2,用两个线程实现. 下面是代码,注释的比较详细了. socket_udp.h #include<st ...
- camera驱动框架分析(上)
前言 camera驱动框架涉及到的知识点比较多,特别是camera本身的接口就有很多,有些是直接连接到soc的camif口上的,有些是通过usb接口导出的,如usb camera.我这里主要讨论前者, ...
- find中的-print0和xargs中-0的奥妙【转】
find cygnus/firmware_cygnus/target/linux/brcm5830/files/arch/arm/mach-iproc/pm_iproc/ -name "*. ...