20pts求助!
查看原帖
20pts求助!
494699
卷王慢即快楼主2022/12/5 18:09
#include<bits/stdc++.h>
using namespace std;
int n, k, ans = 0;
int a[3000001];
int maxq[3000001], minq[3000001];
int main()
{
	speed: std::ios::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);
	cin >> k >> n;
	for(int i = 1; i <= n; i++)
		cin >> a[i];
	int head1 = 1, tail1 = 1;
	int head2 = 1, tail2 = 1;
	int len = 1;
	maxq[1] = 1;
	minq[1] = 1;
	for(int i = 2; i <= n; i++)
	{
		while(head1 <= tail1 && a[minq[tail1]] > a[i]) tail1--;
		while(head2 <= tail2 && a[maxq[tail2]] < a[i]) tail2--;
		minq[++tail1] = i;
		maxq[++tail2] = i;
		while(a[maxq[head2]] - a[minq[head1]] > k)
		{
			if(maxq[head2] < minq[head1]) len = maxq[head2++] + 1;
			else len = minq[head1++] + 1;
		}
		if(i >= k) ans = max(ans, i - len + 1);
	}
	cout << ans;
	return 0;
}

#2~3 AC

2022/12/5 18:09
加载中...