bzoj 1941 Hide and Seek
题目大意:
n个点,求每个点到其最远点距离-到其最近点距离(除自己之外)的最小值
思路:
对于估计函数的理解还不够深刻
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<algorithm>
#include<queue>
#include<vector>
#include<map>
#include<set>
#define ll long long
#define inf 2139062143
#define MAXN 500100
#define MOD 998244353
#define rep(i,s,t) for(register int i=(s),i##__end=(t);i<=i##__end;++i)
#define dwn(i,s,t) for(register int i=(s),i##__end=(t);i>=i##__end;--i)
#define ren(x) for(register int i=fst[x];i;i=nxt[i])
#define pb(i,x) vec[i].push_back(x)
#define pls(a,b) (a+b)%MOD
#define mns(a,b) (a-b+MOD)%MOD
#define mul(a,b) (1LL*(a)*(b))%MOD
using namespace std;
inline int read()
{
int x=,f=;char ch=getchar();
while(!isdigit(ch)) {if(ch=='-') f=-;ch=getchar();}
while(isdigit(ch)) {x=x*+ch-'';ch=getchar();}
return x*f;
}
int rt,n,Dim,ret1,ret2,ans;
struct node{int mx[],mn[],d[],l,r;}tr[MAXN],g;
bool operator < (const node a,const node b) {return a.d[Dim]<b.d[Dim];}
struct kd_tree
{
void upd(int k)
{
node gl=tr[tr[k].l],gr=tr[tr[k].r];
rep(i,,)
{
if(tr[k].l) tr[k].mn[i]=min(tr[k].mn[i],gl.mn[i]),tr[k].mx[i]=max(tr[k].mx[i],gl.mx[i]);
if(tr[k].r) tr[k].mn[i]=min(tr[k].mn[i],gr.mn[i]),tr[k].mx[i]=max(tr[k].mx[i],gr.mx[i]);
}
}
int build(int l,int r,int D)
{
int mid=l+r>>;Dim=D;nth_element(tr+l,tr+mid,tr+r+);
rep(i,,) tr[mid].mn[i]=tr[mid].mx[i]=tr[mid].d[i];
if(l<mid) tr[mid].l=build(l,mid-,D^);
if(mid<r) tr[mid].r=build(mid+,r,D^);
upd(mid);return mid;
}
int Get1(int k,int res=)
{
rep(i,,) res+=max(abs(g.d[i]-tr[k].mn[i]),abs(g.d[i]-tr[k].mx[i]));
return res;
}
int Get2(int k,int res=)
{
rep(i,,) res+=max(,tr[k].mn[i]-g.d[i]);
rep(i,,) res+=max(,g.d[i]-tr[k].mx[i]);return res;
}
int dis(int k,int res=) {rep(i,,) res+=abs(tr[k].d[i]-g.d[i]);return res;}
void query(int k)
{
int dl1=,dr1=,dl2=inf,dr2=inf;
ret1=max(ret1,dis(k));if(dis(k)) ret2=min(ret2,dis(k));
if(tr[k].l) dl1=Get1(tr[k].l),dl2=Get2(tr[k].l);
if(tr[k].r) dr1=Get1(tr[k].r),dr2=Get2(tr[k].r);
if(dl1>dr1)
{
if(dl1>ret1)
{
query(tr[k].l);
if(dr1>ret1||dr2<ret2) query(tr[k].r);
}else
{
if(dr2<ret2) query(tr[k].r);
if(dl2<ret2) query(tr[k].l);
}
}else
{
if(dr1>ret1)
{
query(tr[k].r);
if(dl1>ret1||dl2<ret2) query(tr[k].l);
}else
{
if(dl2<ret2) query(tr[k].l);
if(dr2<ret2) query(tr[k].r);
}
}
}
}kd;
int main()
{
n=read();rep(i,,n) tr[i].d[]=read(),tr[i].d[]=read();
rt=kd.build(,n,),ans=inf;
rep(i,,n)
{
g=tr[i],ret1=,ret2=inf;kd.query(rt);
ans=min(ans,ret1-ret2);
}
printf("%d\n",ans);
}
bzoj 1941 Hide and Seek的更多相关文章
- bzoj 1941 Hide and Seek —— K-D树
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1941 曼哈顿最小距离估价:max( 0, t[x].mn[i] - v.p[i] ) + m ...
- BZOJ - 1941 Hide and Seek (kd树)
题目链接 kd树模板题,求二维空间上的最远点/最近点. 对所有点建立kd树,分别查询每个点即可.单次查询期望时间复杂度$O(logn)$ #include<bits/stdc++.h> u ...
- HDU 1941 Hide and Seek(离散化+树状数组)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1941 题意:给出平面上n个点,找出一点p,使得距离p最近和最远的点的距离之差最小.输出这 ...
- 【BZOJ】【1941】【SDOI2010】Hide and Seek
KD-Tree 一开始看错题了
- bzoj:1941: [Sdoi2010]Hide and Seek
1941: [Sdoi2010]Hide and Seek Time Limit: 16 Sec Memory Limit: 162 MBSubmit: 531 Solved: 295[Submi ...
- BZOJ 3402: [Usaco2009 Open]Hide and Seek 捉迷藏
题目 3402: [Usaco2009 Open]Hide and Seek 捉迷藏 Time Limit: 3 Sec Memory Limit: 128 MB Description 贝 ...
- 【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】Hide and Seek(KD-Tree)
[BZOJ1941]Hide and Seek(KD-Tree) 题面 BZOJ 洛谷 题解 \(KD-Tree\)对于每个点搜一下最近点和最远点就好了 #include<iostream> ...
- [BZOJ1941][Sdoi2010]Hide and Seek
[BZOJ1941][Sdoi2010]Hide and Seek 试题描述 小猪iPig在PKU刚上完了无聊的猪性代数课,天资聪慧的iPig被这门对他来说无比简单的课弄得非常寂寞,为了消除寂寞感,他 ...
随机推荐
- 76. Spring Boot完美解决(406)Could not find acceptable representation原因及解决方法
[原创文章] 使用Spring Boot的Web项目,处理/login请求的控制器方法(该方法会返回JSON格式的数据).此时如果访问localhost:8080/login.html, ...
- 【MVC 2】MVC+EF框架结构实例:注册ID号验证
导读:本篇博客,将通过一个实例,详细介绍MVC+EF的应用.原理性的东西或者说是进一步的解耦和,请看博客: [框架结构 3]MVC+EF实体框架-原理解析.在这里,仅用MVC框架和一个EF生成的Mod ...
- springboot注释详解
1.属性注入 @ConfigurationProperties(prefix="...") spring会从classpath下的/config目录或者classpath的根目录查 ...
- 【electron系列之二】复制图片
// 复制图片 ipcMain.on("copy",(event, arg) =>{ const imagePath = path.join(appPath, `page/i ...
- Codeforces Beta Round #57 (Div. 2) E. Enemy is weak
求满足条件的三元组的个数,可以转换求一元组和二元组组成的满足条件的三元组的个数,且对于(x),(y,z),x > y,且x出现的p_x < p_y. x可直接枚举O(n),此时需要往后查询 ...
- BNUOJ Eeny Meeny Moo
Eeny Meeny Moo Time Limit: 1000ms Memory Limit: 65535KB 大家都有这种经验,当太多的人同时使用互联网的时候 ...
- 寒武纪camp Day2
补题进度:8/10 A(计数+BIT) 题意: 给一个长度为n的数组a[],任意选0<=i<=j<n,将a[i]~a[j]从小到大排序,形成新的数组.问有多少个不同的新数组. N,a ...
- hdu6110(线段树+lca)
题目 http://acm.hdu.edu.cn/showproblem.php?pid=6110 分析 注意到,若干条路径的交一定也是条路径 我们可以维护一个线段树,seg[l..r]存着第l条~第 ...
- java开发面试大全刷题整理
题目源自Java团长公众号,内容个人整理,来源于各大博客,未经允许,不准摘抄,仅供分享,不做商业使用. 本分享多数为浅层知识体系,更为底层的还请自行多写写代码,若有不对之处,望广大的人才指点,不喜勿喷 ...
- Netflix是什么,与Spring Cloud有什么关系
说明:以下总结的观点不一定准确,但是是最好理解的. 1.首先,Netflix是一家做视频的网站,可以这么说该网站上的美剧应该是最火的. 2.Netflix是一家没有CTO的公司,正是这样的组织架构能使 ...