题目描述
题目不过多赘述,此题解是对海绵宝宝大佬双端队列deque的一个改编题解链接,仅将双端队列改为手搓队列(因在查看题解时,未找到这样的题解,遂由此写出,主要是为了和前面单调栈格式一样,方便记忆)海绵宝宝大佬的单调栈和这篇宜一块食用
样例
#include<iostream>
#include<algorithm>
using namespace std;
const int N=1e6+10;
int q[N],a[N];
int n,k;
int main()
{
cin>>n>>k;
for(int i=0;i<n;i++)cin>>a[i];
int hh=0,tt=-1;
for(int i=0;i<n;i++)//下标顺序需要注意
{
while(hh<=tt&&q[tt]>a[i])tt--;//当当前元素大于队尾元素,队尾出队
q[++tt]=a[i];//元素入队
if(q[hh]==a[i-k]&&i-k>=0)hh++;//这里特别要注意下标,hh和i从0开始的
if(i>=k-1)cout<<q[hh]<<" ";
}
cout<<endl;
hh=0,tt=-1;
for(int i=0;i<n;i++)
{
while(hh<=tt&&q[tt]<a[i])tt--;
q[++tt]=a[i];
if(q[hh]==a[i-k]&&i-k>=0)hh++;
if(i>=k-1)cout<<q[hh]<<" ";
}
cout<<endl;
return 0;
}