HDU 1941 Hide and Seek(离散化+树状数组)
题目链接: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(离散化+树状数组)的更多相关文章
- HDU 6318 - Swaps and Inversions - [离散化+树状数组求逆序数][杭电2018多校赛2]
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=6318 Problem Description Long long ago, there was an ...
- HDU 5792 World is Exploding (离散化+树状数组)
题意:给定 n 个数,让你数出 a < b && c < d && a != b != c != d && Aa < Ab & ...
- hdu 3030 Increasing Speed Limits (离散化+树状数组+DP思想)
Increasing Speed Limits Time Limit: 2000/10000 MS (Java/Others) Memory Limit: 32768/32768 K (Java ...
- HDU 5862 Counting Intersections(离散化 + 树状数组)
Counting Intersections Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/ ...
- HDU 5862 Counting Intersections(离散化+树状数组)
HDU 5862 Counting Intersections(离散化+树状数组) 题目链接http://acm.split.hdu.edu.cn/showproblem.php?pid=5862 D ...
- hdu 3015 Disharmony Trees (离散化+树状数组)
Disharmony Trees Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- HDU 6318.Swaps and Inversions-求逆序对-线段树 or 归并排序 or 离散化+树状数组 (2018 Multi-University Training Contest 2 1010)
6318.Swaps and Inversions 这个题就是找逆序对,然后逆序对数*min(x,y)就可以了. 官方题解:注意到逆序对=交换相邻需要交换的次数,那么输出 逆序对个数 即可. 求逆序对 ...
- CodeForces 540E - Infinite Inversions(离散化+树状数组)
花了近5个小时,改的乱七八糟,终于A了. 一个无限数列,1,2,3,4,...,n....,给n个数对<i,j>把数列的i,j两个元素做交换.求交换后数列的逆序对数. 很容易想到离散化+树 ...
- Ultra-QuickSort(归并排序+离散化树状数组)
Ultra-QuickSort Time Limit: 7000MS Memory Limit: 65536K Total Submissions: 50517 Accepted: 18534 ...
- hdu 5869 区间不同GCD个数(树状数组)
Different GCD Subarray Query Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/65536 K ( ...
随机推荐
- 事务并发处理: DB+ORM+逻辑代码
在学习了马士兵有关事务并发处理的视频后, 感觉对事务并发处理的概念,问题以及解决方式有了一定的了解,赶紧记录下来以备后用. 1. 事务:一系列操作要么都完成,要么一个都不完成 2. 事务并发:多个事务 ...
- JAVA 关于Icon,Image,ImageIcon的简单的对比参考 分类: Java Game 2014-08-14 17:08 210人阅读 评论(0) 收藏
转自:http://blog.csdn.net/bcmissrain/article/details/7190886 其实就算是现在,我还是有不少地方概念模糊,但是下面的内容是是没有什么问题的.稍微介 ...
- C++实现CString和string的互相转换
CString->std::string 例子: CString strMfc=“test“; std::string strStl; strStl=strMfc.GetBuffer(0); u ...
- windows phone MVVM开发心得第一天
之前刚刚学了asp.net网站的三层架构,为其中的优点着迷,可惜寒假本来决定学下MVC的计划泡汤了,刚开学,学了下windows phone 的MVVM模式的开发,在此留下点心得和脚印,第一天只是学了 ...
- Javascript学习笔记1 数论
1.Javascript不用担心内存的回收与对象的销毁! 2.Javascript有:±infinity.NaN全局变量表示 被0整除的±无穷 和 非数字.undefined和null表示 未定义 和 ...
- SQL 比较乱
--DROP TABLE T_UserInfo---------------------------------------------------- --建测试表 CREATE TABLE T_Us ...
- JSONObject 包的依赖
commons-lang.jar commons-beanutils.jar commons-collections.jar commons-logging.jar ezmorph.jar json- ...
- 概述Log4j简介
在强调可重用组件开发的今天,除了自己从头到尾开发一个可重用的日志操作类外,Apache为我们提供了一个强有力的日志操作包-Log4j. Log4j是Apache的一个开放源代码项目,通过使用Log4j ...
- HDU 5151 Sit sit sit 区间DP + 排列组合
Sit sit sit 问题描述 在一个XX大学中有NN张椅子排成一排,椅子上都没有人,每张椅子都有颜色,分别为蓝色或者红色. 接下来依次来了NN个学生,标号依次为1,2,3,...,N. 对于每个学 ...
- WebSocket API简介
WebSocket是html5新增加的一种通信协议,目前流行的浏览器都支持这个协议,例如Chrome,Safari,Firefox,Opera,IE等等,对该协议支持最早的应该是chrome,从chr ...