「 「 「动态规划 」 」 」第 6 6 6章 单调队列 ( ( (前 3 3 3题 ) ) )
目录:
A.滑动窗口
B.粉刷木板
C.耗费体力
A . A. A. 例题 1 1 1 滑动窗口
分析:
单调队列模板了 一个最大 一个最小
CODE:
#include<cmath>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<iostream>
using namespace std;
typedef long long ll;
const int N=1e6+5;
int n,k,a[N],q1[N],q2[N];
void Min()
{
int head=1,tail=0;
for(int i=1;i<=n;i++)
{
while(head<=tail&&q1[head]+k<=i) head++;
while(head<=tail&&a[i]<a[q1[tail]]) tail--;
q1[++tail]=i;
if(i>=k) printf("%d ",a[q1[head]]);
}
printf("\n");
}
void Max()
{
int head=1,tail=0;
for(int i=1;i<=n;i++)
{
while(head<=tail&&q2[head]+k<=i) head++;
while(head<=tail&&a[i]>a[q2[tail]]) tail--;
q2[++tail]=i;
if(i>=k) printf("%d ",a[q2[head]]);
}
}
int main()
{
scanf("%d%d",&n,&k);
for(int i=1;i<=n;i++)
scanf("%d",&a