求调!!!玄关
查看原帖
求调!!!玄关
872386
Officer楼主2024/7/8 15:04
#include<bits/stdc++.h>
using namespace std;
long long n,k,tail1,tail2,head1,head2,l,r,sum;
long long a[3000005],e1[3000005],e2[3000005];
int main()
{
	cin>>k>>n;
	l=1;
	head1=head2=1;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
	}
	while(r+1<=n)
	{
		r++;
		while(head1<=tail1&&a[e1[tail1]]<=a[r])
		{
			tail1--;
		}
		while(head2<=tail2&&a[e2[tail2]]>=a[r])
		{
			tail2--;
		}
		e1[++tail1]=r;
		e2[++tail2]=r;
		while(a[e1[tail1]]-a[e2[tail2]]>k&&l<=r)
		{
			l++;
			while(head1<=tail1&&e1[head1]<l)
			{
				head1++;
			}
			while(head2<=tail2&&e2[head2]<l)
			{
				head2++;
			}
		}
		if(a[e1[head1]]-a[e2[head2]]<=k)
		{
			sum=max(sum,r-l+1);
		}
	}
	cout<<sum<<endl;
 	return 0;
}
/*
*/

2024/7/8 15:04
加载中...