题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1941

题意:给出平面上n个点,找出一点p,使得距离p最近和最远的点的距离之差最小。输出这个差值。

思路: 计算出距离每个点最近的点的距离和最远点的的距离。怎么计算呢?首先我们计算每个点到其左下角的那些点的最近最远距离。只要按照x升序然后y升序,之后将y离散化。一个一个插入到树状数组中。这样的话(x2+y2)-(x1+y1)的差值就是它们的距离。对于其右下角、左上角、右上角乘以(-1,1)(1,-1)(-1,-1)就跟处理左下角一样了。

struct node
{
    int x,y,id;
};

node a[N];
int S[2][N],y[N];
int n,f[N][2];

void add(int flag,int x,int t)
{
    while(x<N) 
    {
        if(!flag) upMin(S[flag][x],t),x+=x&-x;
        else upMax(S[flag][x],t),x+=x&-x;
    }
}

int get(int flag,int x)
{
    int ans;
    if(!flag)
    {
        ans=INF;
        while(x) upMin(ans,S[flag][x]),x-=x&-x;
    }
    else
    {
        ans=-INF;
        while(x) upMax(ans,S[flag][x]),x-=x&-x;
    }
    return ans;
}

int cmp(node a,node b)
{
    if(a.x!=b.x) return a.x<b.x;
    return a.y<b.y;
}

void deal(int sx,int sy)
{
    int i;
    FOR1(i,n)
    {
        a[i].x*=sx;
        a[i].y*=sy;
        y[i]=a[i].y;
    }
    sort(y+1,y+n+1);
    sort(a+1,a+n+1,cmp);
    FOR1(i,N-1) S[1][i]=-INF,S[0][i]=INF;
    int p,k;
    FOR1(i,n)
    {
        p=lower_bound(y+1,y+n+1,a[i].y)-y;
        k=a[i].id;
        upMin(f[k][0],a[i].x+a[i].y-get(1,p));
        upMax(f[k][1],a[i].x+a[i].y-get(0,p));
        add(1,p,a[i].x+a[i].y);
        add(0,p,a[i].x+a[i].y);
    }
    FOR1(i,n)
    {
        a[i].x*=sx;
        a[i].y*=sy;
    }
}

int main()
{
    RD(n);
    int i;
    FOR1(i,n) RD(a[i].x,a[i].y),a[i].id=i;
    FOR1(i,n) f[i][0]=INF,f[i][1]=-INF;
    deal(1,1); deal(1,-1); deal(-1,1); deal(-1,-1);
    int ans=INF;
    FOR1(i,n) upMin(ans,f[i][1]-f[i][0]);
    PR(ans);
}

HDU 1941 Hide and Seek(离散化+树状数组)的更多相关文章

  1. HDU 6318 - Swaps and Inversions - [离散化+树状数组求逆序数][杭电2018多校赛2]

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=6318 Problem Description Long long ago, there was an ...

  2. HDU 5792 World is Exploding (离散化+树状数组)

    题意:给定 n 个数,让你数出 a < b && c < d && a != b != c != d  && Aa < Ab & ...

  3. hdu 3030 Increasing Speed Limits (离散化+树状数组+DP思想)

    Increasing Speed Limits Time Limit: 2000/10000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java ...

  4. HDU 5862 Counting Intersections(离散化 + 树状数组)

    Counting Intersections Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/ ...

  5. HDU 5862 Counting Intersections(离散化+树状数组)

    HDU 5862 Counting Intersections(离散化+树状数组) 题目链接http://acm.split.hdu.edu.cn/showproblem.php?pid=5862 D ...

  6. hdu 3015 Disharmony Trees (离散化+树状数组)

    Disharmony Trees Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  7. HDU 6318.Swaps and Inversions-求逆序对-线段树 or 归并排序 or 离散化+树状数组 (2018 Multi-University Training Contest 2 1010)

    6318.Swaps and Inversions 这个题就是找逆序对,然后逆序对数*min(x,y)就可以了. 官方题解:注意到逆序对=交换相邻需要交换的次数,那么输出 逆序对个数 即可. 求逆序对 ...

  8. CodeForces 540E - Infinite Inversions(离散化+树状数组)

    花了近5个小时,改的乱七八糟,终于A了. 一个无限数列,1,2,3,4,...,n....,给n个数对<i,j>把数列的i,j两个元素做交换.求交换后数列的逆序对数. 很容易想到离散化+树 ...

  9. Ultra-QuickSort(归并排序+离散化树状数组)

    Ultra-QuickSort Time Limit: 7000MS   Memory Limit: 65536K Total Submissions: 50517   Accepted: 18534 ...

  10. hdu 5869 区间不同GCD个数(树状数组)

    Different GCD Subarray Query Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K ( ...

随机推荐

  1. 【BZOJ】【2002】【HNOI2010】弹飞绵羊

    呃这题的Hint写着splay启发式合并……但是蒟蒻不懂T_T只好写个简单的LCT来蒙混过关,就是时间效率上差劲的很…… 不过能够一次AC心情也是蛮愉悦的~ /******************** ...

  2. UML概述(转载)

    UML是一种标准语言,用于指定,可视化,构造和文档的软件系统. UML是OMG在1997年1月提出了创建由对象管理组织(OMG)和UML1.0规范草案. OMG不断努力,使一个真正的行业标准. UML ...

  3. Http Module 介绍

    引言 Http 请求处理流程 和 Http Handler 介绍 这两篇文章里,我们首先了解了Http请求在服务器端的处理流程,随后我们知道Http请求最终会由实现了IHttpHandler接口的类进 ...

  4. 利用excel数据透视表实现快速统计相关数据

    昨天ytkah在做数据报表时需要做一些具体统计数字:公司每天都有人申请铅笔.笔记本等一些文具用品,现在想要统计每天申请铅笔多少支.笔记本多少本,如下图所示,这个要如何实现呢? excel数据透视表怎么 ...

  5. 整数划分 Integer Partition(一)

    话说今天百度面试,可能是由于我表现的不太好,面试官显得有点不耐烦,说话的语气也很具有嘲讽的意思,搞得我有点不爽.Whatever,面试中有问到整数划分问题,回答这个问题过程中被面试官搞的不胜其烦,最后 ...

  6. Office 2013 note

    1.每次打开重新配置: 问题表现:启动后发现每次打开都会出现“正在配置”的进度 执行:reg add HKCU\Software\Microsoft\Office\15.0\Word\Options ...

  7. sream bytes[] img相互转换

    /// <summary> /// 将 Stream 转成 byte[] /// </summary> /// <param name="stream" ...

  8. Eclipse环境下配置spket中ExtJS提示

    使用eclipse编写extjs时,一定会用到spket这个插件,spket可以单独当作ide使用,也可以当作eclipse插件使用,我这里是当作eclipse的插件使用的,下面来一步步图解说明如何配 ...

  9. Tomcat目录结构

    首先来了解一下Tomcat5.5的目录结构: /bin:存放windows或Linux平台上启动和关闭Tomcat的脚本文件 /conf:存放Tomcat服务器的各种全局配置文件,其中包括server ...

  10. lintcode:买卖股票的最佳时机 IV

    买卖股票的最佳时机 IV 假设你有一个数组,它的第i个元素是一支给定的股票在第i天的价格. 设计一个算法来找到最大的利润.你最多可以完成 k 笔交易. 注意事项 你不可以同时参与多笔交易(你必须在再次 ...