除#1#3全WA,玄关求调
查看原帖
除#1#3全WA,玄关求调
785713
yzjznbQWQ楼主2024/9/10 21:12

刚学oi的蒟蒻 参考 oiwiki

#include<bits/stdc++.h>

#define code using
#define by namespace
#define yzjznb std

code by yzjznb;

const int N = 1e7+5;

#define ll long long

inline int read()
{
    int x=0,f=1;
    char ch=getchar();
    while(ch<'0'||ch>'9')
    {
        if(ch=='-')
            f=-1;
        ch=getchar();
    }
    while(ch>='0' && ch<='9')
        x=x*10+ch-'0',ch=getchar();
    return x*f;
} 

void write(ll x)
{
    if(x>9) write(x/10);
    putchar(x%10|48);
} 

ll n=read(),d=read(),qmax[N],qmin[N],ans; //单调队列qmax维护最大值 ,qmin同理 
ll hmax,hmin,tmax,tmin;
	
struct water
{
	ll x,y;
	bool operator<(const water &a) const{
		return x<a.x;//按x排序 
	}
}a[N];//记录水滴 

void solve()
{
	hmax=hmin=1,tmax=tmin=0;// 初始化 
	ll l=1;//花盆左起点 
	ans=2e9;
	for(int i=1;i<=n;i++)
	{
		while(hmax<=tmax&&a[i].y>a[qmax[hmax]].y) tmax--;
		qmax[++tmax]=i;
		while(hmin<=tmin&&a[i].y<a[qmin[hmin]].y) tmin--;
		qmin[++tmin]=i;
		while(l<=i&&a[qmax[hmax]].y-a[qmin[hmin]].y>=d) 
		{
			ans=min(ans,a[i].x-a[l].x);
			l++;
			while(hmax<=tmax&&qmax[hmax]<l) hmax++;
			while(hmin<=tmin&&qmin[hmin]<l) hmin++;
		}
	}
}

int main(){
	for(int i=1;i<=n;i++)
		a[i].x=read(),a[i].y=read();//输入 
	sort(a+1,a+1+n); 
	solve();
	if(ans<2e9) printf("%lld\n",ans);
	else puts("-1");
	return 0;
}
2024/9/10 21:12
加载中...