bzoj1941
KD-tree

**了这道题
这个估价函数好鬼畜,把min打成max。。。
关于min的估价函数非常鬼畜,具体我也不知道为什么。
#include<bits/stdc++.h>
using namespace std;
const int N = 5e5 + ;
int n, d, root, ans = 2e9, mx, mn;
struct data {
int x, y, mxx, mnx, mny, mxy, lc, rc;
bool friend operator < (const data &a, const data &b) {
if(d == ) return a.x == b.x ? a.y < b.y : a.x < b.x;
if(d == ) return a.y == b.y ? a.x < b.x : a.y < b.y;
}
} a[N];
void update(int x)
{
a[x].mnx = min(a[x].x, min(a[a[x].lc].mnx, a[a[x].rc].mnx));
a[x].mxx = max(a[x].x, max(a[a[x].lc].mxx, a[a[x].rc].mxx));
a[x].mny = min(a[x].y, min(a[a[x].lc].mny, a[a[x].rc].mny));
a[x].mxy = max(a[x].y, max(a[a[x].lc].mxy, a[a[x].rc].mxy));
}
int build(int l, int r, int D)
{
if(l > r) return ;
int mid = (l + r) >> ;
nth_element(a + l, a + mid, a + r + );
a[mid].mnx = a[mid].mxx = a[mid].x;
a[mid].mny = a[mid].mxy = a[mid].y;
a[mid].lc = build(l, mid - , D ^ );
a[mid].rc = build(mid + , r, D ^ );
update(mid);
return mid;
}
int query_mn(int k, int x, int y)
{
int d = abs(a[k].x - x) + abs(a[k].y - y),
dl = a[k].lc ? max(a[a[k].lc].mnx - x, ) + max(x - a[a[k].lc].mxx, ) + max(a[a[k].lc].mny - y, ) + max(y - a[a[k].lc].mxy, ) : 5e8,
dr = a[k].rc ? max(a[a[k].rc].mnx - x, ) + max(x - a[a[k].rc].mxx, ) + max(a[a[k].rc].mny - y, ) + max(y - a[a[k].rc].mxy, ) : 5e8;
if(d) mn = min(mn, d);
if(dl < dr)
{
if(mn > dl) query_mn(a[k].lc, x, y);
if(mn > dr) query_mn(a[k].rc, x, y);
}
else
{
if(mn > dr) query_mn(a[k].rc, x, y);
if(mn > dl) query_mn(a[k].lc, x, y);
}
}
int query_mx(int k, int x, int y)
{
int d = abs(a[k].x - x) + abs(a[k].y - y),
dl = a[k].lc ? max(abs(a[a[k].lc].mnx - x), abs(a[a[k].lc].mxx - x)) + max(abs(a[a[k].lc].mny - y), abs(a[a[k].lc].mxy - y)) : -5e8,
dr = a[k].rc ? max(abs(a[a[k].rc].mnx - x), abs(a[a[k].rc].mxx - x)) + max(abs(a[a[k].rc].mny - y), abs(a[a[k].rc].mxy - y)) : -5e8;
if(d) mx = max(mx, d);
if(dl > dr)
{
if(mx < dl) query_mx(a[k].lc, x, y);
if(mx < dr) query_mx(a[k].rc, x, y);
}
else
{
if(mx < dr) query_mx(a[k].rc, x, y);
if(mx < dl) query_mx(a[k].lc, x, y);
}
}
int main()
{
a[].mnx = a[].mny = 5e8;
a[].mxx = a[].mxy = -5e8;
scanf("%d", &n);
for(int i = ; i <= n; ++i) scanf("%d%d", &a[i].x, &a[i].y);
root = build(, n, );
for(int i = ; i <= n; ++i)
{
mx = -5e8;
mn = 5e8;
query_mn(root, a[i].x, a[i].y);
query_mx(root, a[i].x, a[i].y);
ans = min(ans, mx - mn);
}
printf("%d\n", ans);
return ;
}
bzoj1941的更多相关文章
- 【bzoj1941】 Sdoi2010—Hide and Seek
http://www.lydsy.com/JudgeOnline/problem.php?id=1941 (题目链接) 题意 给出n个二维平面上的点,求一点使到最远点的距离-最近点的距离最小. Sol ...
- 【kd-tree】bzoj1941 [Sdoi2010]Hide and Seek
枚举每个点,计算离他最近的和最远的点. #include<cstdio> #include<cmath> #include<algorithm> using nam ...
- [BZOJ1941][Sdoi2010]Hide and Seek
[BZOJ1941][Sdoi2010]Hide and Seek 试题描述 小猪iPig在PKU刚上完了无聊的猪性代数课,天资聪慧的iPig被这门对他来说无比简单的课弄得非常寂寞,为了消除寂寞感,他 ...
- bzoj1941 hdu5992
看了青岛赛区的题简单学了一下kd,感觉这东西还是挺厉害的 一般kd树找最近点对最坏是O(n),但是随机情况下跑得还是很快的 kd树是一棵BST,但是每一层的关键字不同 一般写法是按照每一维轮流来,这一 ...
- 【BZOJ1941】Hide and Seek(KD-Tree)
[BZOJ1941]Hide and Seek(KD-Tree) 题面 BZOJ 洛谷 题解 \(KD-Tree\)对于每个点搜一下最近点和最远点就好了 #include<iostream> ...
- 【BZOJ1941】[Sdoi2010]Hide and Seek KDtree
[BZOJ1941][Sdoi2010]Hide and Seek Description 小猪iPig在PKU刚上完了无聊的猪性代数课,天资聪慧的iPig被这门对他来说无比简单的课弄得非常寂寞,为了 ...
- KD-Tree复习笔记(BZOJ1941 & BZOJ2648 & BZOJ4066)
快一年了都没碰到什么必须用KDT的题目导致模板完全忘光了,重新复习了一下. K_Dimention_Tree是一种用来处理二维以上问题的数据结构(OI中一般都是二维),本质是二维启发式估价函数实现剪枝 ...
- [bzoj1941][Sdoi2010]Hide and Seek_KD-Tree
Hide and Seek bzoj-1941 Sdoi-2010 题目大意:给出平面上n个点,选出一个点,使得距离这个点的最远点曼哈顿距离减去距离这个点的最近非己点的曼哈顿距离最小.输出最小曼哈顿距 ...
- 【BZOJ-1941】Hide and Seek KD-Tree
1941: [Sdoi2010]Hide and Seek Time Limit: 16 Sec Memory Limit: 162 MBSubmit: 830 Solved: 455[Submi ...
- 【bzoj1941】【Sdoi2010】Hide and Seek
---恢复内容开始--- Description 小猪iPig在PKU刚上完了无聊的猪性代数课,天资聪慧的iPig被这门对他来说无比简单的课弄得非常寂寞,为了消除寂寞感,他决定和他的好朋友giPi(鸡 ...
随机推荐
- java与MFC中的一些常识
一个.java文件中可以有很多类.不过注意以下几点:1.public 权限的类只能有一个(也可以一个都没有,但最多只有1个)2.这个.java文件的文件名必须是public类的类名(一般的情况下,这里 ...
- shell(3):文本处理、基本语法和脚本编写
一.awk.变量.运算符.if多分支 awk:shell编辑器的一种文本处理工具/命令,同grep.sed一样均可解释正则.具体运用下面awk文本处理有详细说明. 变量:分为系统变量和临时变量.变量一 ...
- Swift的两个小窍门
一:查看Swift版本号(How do I see which version of Swift I’m using in Xcode?) 终端下输入:xcrun swift -version(in ...
- POJ 3580(SuperMemo-Splay区间加)[template:Splay V2]
SuperMemo Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 11384 Accepted: 3572 Case T ...
- ACM-BFS之Open the Lock——hdu1195(双向BFS)
这道题的0基础版本号,暴力BFS及题目详情请戳:http://blog.csdn.net/lttree/article/details/24658031 上回书说道,要用双向BFS来尝试一下. 最终A ...
- In Git, there are two main ways to integrate changes from one branch into another: the merge and the rebase.
https://git-scm.com/book/en/v2/Git-Branching-Rebasing
- javascript --- 声明提前(学习笔记)
声明提升 未声明变量 console.log(a); 在没有定义 a 的情况下,直接使用,会报错. 声明变量 console.log(a); var a = 2; 输出结果:undefined 并不会 ...
- Hive与impala的对比测试实验
前面几篇随笔记录了我安装环境的一些笔记,环境ok以后,自然要看看impala到底性能如何,拿他来hive做做对比: 前面hive章节中,已经建立了一张名叫chengyeliang的table,该表的结 ...
- sample code java pom.xml
pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="htt ...
- ./autogen.sh: 4: autoreconf: not found
./autogen.sh: 4: autoreconf: not found 是在不同版本的 tslib 下执行 autogen.sh 产生.它们产生的原因一样,是因为没有安装 automake ...