金色丝线将瞬间一分为二 树状数组的使用

这篇博客介绍了一个使用树状数组解决遗体距离之和超过特定值问题的方法。通过分析题目,作者指出可以转换问题并利用树状数组的特性,有效地计算动态变化的距离之和,从而找到可能的米莉·马露遗体的最早出现位置。
摘要由CSDN通过智能技术生成

Description
为了解开骑士木乃伊事件,久城一弥和布洛瓦警官来到了停尸间。停尸间里有N具遗体,每具遗体都有一个坐标(X,Y)。
由于停尸间的遗体摆放得横平竖直,我们认为两具遗体(Xi,Yi)和(Xj,Yj)得距离为|Xi-Xj|+|Yi-Yj|。
负责停尸间的工人由于需要经常搬运遗体,所以对任意两具遗体的距离之和特别有印象。
工人们已经记不得每具遗体对应的是什么人了。但是它们记得,八年前将米莉·马露的遗体搬进停尸间之后,停尸间的任意两具遗体的距离之和超过了D。
现在给你工人们将N具遗体搬进停尸间的时间顺序,请你找出第一具有可能是米莉·马露的遗体。如果不存在这样的遗体,请输出-1。

Input
第一行两个整数N,D,意义如题目描述所示。
接下来N行,按照时间顺序给出每具遗体的坐标,每行两个整数X,Y。

Output
输出一行一个整数,表示按照时间顺序第一具有可能是米莉·马露的遗体的编号。如果不存在这样的遗体,输出-1。
Sample Input
5 10
1 1
2 2
3 3
4 4
5 5
Sample Output
4
Data Constraint
10%的数据保证,N≤500.
40%的数据保证,N≤8000.
60%的数据保证,N≤1e5.
另有10%的数据保证,所有遗体的横坐标X都相同。
另有10%的数据保证,X(i)≤X(i+1),且Y(i)≤Y(i+1)。
100%的数据保证,N≤6×10^5,0≤D≤1e18,0≤X,Y≤1e9.

观察题目,我们可以知道,题目求的是对于任意的k,使得Σ(|xi-xj|+|yi-yj|)>D (1≤i<j≤k),最小的k是多少。
理解题目,可以很容易的知道,若我们前n-1具尸体间的曼哈顿距离之和为f(n-1),则f(n)=f(n-1)+Σ(|xi-xn|+|yi-yn|) (1≤i≤n-1)
因此,我们可以知道,对于这样的函数f(x)必然是一个单调递增的函数。
我们重新回头观察题目,对于两个点(xi,yi),(xj,yj),曼哈顿距离 distance=|xi-xj|+|yi-yj|,那么,我们可以变式为 distance=max(xi,xj)-min(xi,xj)+max(yi,yj)-min(yi,yj)。
而我们再移动一下式子,让它没有负号,并消掉一边的函数符号,过程如下
distance+min(xi,xj)+min(yi,yj)=max(xi,xj)+max(yi,yj)→distance+2×min(xi,xj)+2×min(yi,yj)=max(xi,xj)+min(xi,xj)+max(yi,yj)+min(yi,yj)
经过刚才的过程,我们得到了式子 distance=xi+xj+yi+yj-2×min(xi,xj)-2×min(yi,yj)。
当然,这个式子我们也可以理解成点i,点j以点(0,0)为中转站,而得到的它们间的曼哈顿距离。
所以,我们就可以得到函数 dis(i,j)=

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值