单调队列·求助
查看原帖
单调队列·求助
677581
_Glassy_Sky_楼主2023/1/13 21:24
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e6 + 5;
struct node
{
	int num, id;
}que[maxn];
int head = 1, tail = 0;
int a[maxn];
int main()
{
	int n, k;
	cin >> n >> k;
	for(int i = 1; i <= n; i ++)
		cin >> a[i];
	for(int i = 1; i <= n; i ++)
	{
		while(head <= tail && que[head].id + k > i)
			head ++;
		while(head <= tail && que[tail].num > a[i])
			tail --;
		que[++ tail].id = i;
		que[tail].num = a[i]; 
		if(i >= k)
			printf("%d ", que[head].num);
	}
	head = 1, tail = 0;
	cout << "\n";
	for(int i = 1; i <= n; i ++)
	{
		while(head <= tail && que[head].id + k <= i)
			head ++;
		while(head <= tail && que[tail].num <= a[i])
			tail --;
		que[++ tail].id = i;
		que[tail].num = a[i]; 
		if(i >= k)
			printf("%d ", que[head].num);
	}
	return 0;
}
2023/1/13 21:24
加载中...