#(单调队列优化)P1886 滑动窗口(普及+/提高-)

Posted little-cute-hjr

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了#(单调队列优化)P1886 滑动窗口(普及+/提高-)相关的知识,希望对你有一定的参考价值。

https://www.jianshu.com/p/0bf8d8f1e450

https://blog.csdn.net/qq_42754826/article/details/89052630

#include<cstdio>
#define N 1000020
using namespace std;
int n,k;
int a[N];
struct monotone_queue
int q[N],p[N];
int head,tail;

minq,maxq;
void min_query()

minq.head=1;
minq.tail=0;
for(int i=1;i<=n;i++)

while(minq.head<=minq.tail&&minq.q[minq.tail]>=a[i]) minq.tail--;
minq.q[++minq.tail]=a[i];
minq.p[minq.tail]=i;
while(minq.head<=minq.tail&&minq.p[minq.head]<=i-k) minq.head++;
if(i>=k)printf("%d ",minq.q[minq.head]);

printf("\n");


void max_query()

maxq.head=1;
maxq.tail=0;
for(int i=1;i<=n;i++)

while(maxq.head<=maxq.tail&&maxq.q[maxq.tail]<=a[i]) maxq.tail--;
maxq.q[++maxq.tail]=a[i];
maxq.p[maxq.tail]=i;
while(maxq.head<=maxq.tail&&maxq.p[maxq.head]<=i-k) maxq.head++;
if(i>=k)printf("%d ",maxq.q[maxq.head]);




int main()

scanf("%d %d",&n,&k);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
min_query();
max_query();
return 0;

 

以上是关于#(单调队列优化)P1886 滑动窗口(普及+/提高-)的主要内容,如果未能解决你的问题,请参考以下文章

洛谷P1886 滑动窗口 单调队列

ybtoj 单调队列课堂过关luogu P1886例题1滑动窗口

P1886 滑动窗口 /模板单调队列

luogu P1886 滑动窗口(单调队列

洛谷P1886滑动窗口

P1886 滑动窗口