「模板」 单调队列
「模板」 单调队列
要保证队列单调增/减。
以增为例——
入队时,如果待入队元素小于队尾元素,队尾就出队,直到满足单调性时进队。
超出范围时队首出队。
STL deque是好东西。
#include <cstdio>
#include <deque>
using namespace std;
const int MAXN=1000010;
int n,k,a[MAXN];
struct node
{
int v,p;
};
void Solve(bool flag)
{
deque<node> q;
for(int i=1;i<=n;++i)
{
while(!q.empty() && flag==(a[i]>q.back().v))
q.pop_back();
q.push_back((node){a[i],i});
if(i>=k)
{
if(q.front().p<=i-k)
q.pop_front();
printf("%d ",q.front().v);
}
}
putchar('\n');
}
int main(int argc,char *argv[])
{
scanf("%d %d",&n,&k);
for(int i=1;i<=n;++i)
scanf("%d",&a[i]);
Solve(0);
Solve(1);
return 0;
}
谢谢阅读