单调队列20pts求助
查看原帖
单调队列20pts求助
766313
Towards_Dawn楼主2024/1/28 16:02
#include<bits/stdc++.h>
using namespace std;
int n,d,k,ans=0x3f3f3f,b[100010];
struct st{
	int x,y;
}a[100010];
bool cmp(st a,st b){
	return a.x<b.x;
}
int main(){
	cin>>n>>d;
	deque<int>q,p;
	for(int i=1;i<=n;i++){
		cin>>a[i].x>>a[i].y;
	}
	sort(a+1,a+1+n,cmp);
	q.push_back(0);
	p.push_back(0);
	for(int i=0;i<=n;i++){
		while(q.size()&&q.front()<i)q.pop_front();
		while(p.size()&&p.front()<i)p.pop_front();
		while(k<n&&a[p.front()].y-a[q.front()].y<d){
			k++;
			while(p.size()&&p.back()<a[k].y)p.pop_back();
			p.push_back(k);
			while(q.size()&&q.back()>a[k].y)q.pop_back();
			q.push_back(k);
		}
		if(a[p.front()].y-a[q.front()].y>=d)ans=min(ans,a[k].x-a[i].x);
	} 
	if(ans>=0x3f3f3f)cout<<-1; 
	else cout<<ans;
	return 0;
}

调了两个半小时了没调出来,求助

2024/1/28 16:02
加载中...