实在调不出来了,样例没过,除#3全WA
查看原帖
实在调不出来了,样例没过,除#3全WA
1011907
_QWQ_TAT_楼主2024/5/8 17:07

rt,

#include <bits/stdc++.h>
using namespace std;
#define int long long

struct node{
	int x,y;
}a[1000005];

int n,d;
int q[1000006],hh,tt;
int q1[1000006],hh1,tt1;
int l,r;
int ans;

bool cmp(node a,node b){
	return a.x<b.x;
}
bool check(int k){
	hh=1;
	tt=0;
	hh1=1;
	tt1=0;
	for (int i=1;i<=n;i++){
		while(hh<=tt && a[q[hh]].x+k<=a[i].x)hh++;
		while(hh<=tt && a[q[tt]].y>a[i].y)tt--;
		q[++tt]=i;
		while(hh1<=tt1 && a[q1[hh1]].x+k<=a[i].x)hh1++;
		while(hh1<=tt1 && a[q1[tt1]].y<a[i].y)tt1--;
		q1[++tt1]=i;
		if (a[i].x<k)continue;
		if (a[q1[hh]].y-a[q[hh1]].y>=d) {
			cout<<a[q1[hh]].y<<" "<<a[q[hh1]].y<<"\n";
			return 1;
		}
	}
	return 0;
}
signed main(){
	cin>>n>>d;
	for (int i=1;i<=n;i++){
		cin>>a[i].x>>a[i].y;
	}sort(a+1,a+n+1,cmp);
	int maxx=-1145,minn=11451419;
	for (int i=1;i<=n;i++){
		maxx=max(maxx,a[i].y);
		minn=min(minn,a[i].y);
	}
	if (maxx-minn<d){
		puts("-1");return 0;
	}
	l=0;r=1e6;
//	if(n==100000){
//		puts("250144");
//		return 0;
//	} 
	while(l<=r){
		int mid=(l+r)>>1;
//		cout<<l<<" "<<r<<"\n";
		if (check(mid)) r=mid-1,ans=mid;
		else l=mid+1;
	}
	cout<<ans;
}/*
4 5
6 3
2 4
4 10
12 15
*/
2024/5/8 17:07
加载中...