十分求调
查看原帖
十分求调
736891
Eternality楼主2022/10/29 10:09
#include<bits/stdc++.h>
using namespace std;

const int N=1e6;
int n,d,q1[N],q2[N],ans=1e9;

struct T
{
	int x,y;
}t[N];

bool cmp(T a,T b)
{
	return a.x<b.x;
}

int main()
{
	freopen("P2698_2.in","r",stdin);
	freopen("32423","w",stdout);
	scanf("%d%d",&n,&d);
	for(int i=1;i<=n;i++)
	{
		scanf("%d%d",&t[i].x,&t[i].y);
	}
	sort(t+1,t+1+n,cmp);
	int l=t[1].x,l1=1,l2=1,r1=0,r2=0;
	for(int i=1;i<=n;i++)
	{
		while(t[q1[l1]].y-t[q2[l2]].y>d)
		{
			if(t[q1[l1]].x<t[q2[l2]].x&&l1<=r1)l=t[q1[l1]].x+1,l1++;
			if(t[q1[l1]].x>=t[q2[l2]].x&&l2<=r2)l=t[q2[l2]].x+1,l2++;
		}
		while(l1<=r1&&t[i].y>=t[q1[r1]].y)r1--;
		while(l2<=r2&&t[i].y<=t[q2[r2]].y)r2--;
		q1[++r1]=i;
		q2[++r2]=i;
		if(t[i].x-l==0)continue;
		ans=min(ans,t[i].x-l);
	}
	if(ans==1e9)cout<<-1;
	else cout<<ans<<endl;
	return 0;
}
2022/10/29 10:09
加载中...