和普通的队列的区别:
它的队首和普通的队列一样,只能删除元素。
而它的队尾既可以添加元素也可以删除元素。
通常来说也可以叫做输入受限的双端队列(栈)
例题:
滑动窗口:
实现步骤:
1
3 1
-1 输出-1
-3 输出-3
5 -3 输出-3
3 -3 输出-3
6 3 输出3
7 6 3 输出3
#include<bits/stdc++.h>
using namespace std;
struct node
{
int id;
int va;
}a[1000005];
deque<node>q;
int main()
{
int t;
int n,m;
scanf("%d%d",&n,&m);
for(int i=0;i<n;i++)
{
scanf("%d",&t);
if(i==0)
cout<<0<<endl;
else
printf("%d\n",q.front().va);
if(!q.empty()&&i-q.front().id>=m)
q.pop_front();
while(!q.empty()&&q.back().va>t)
q.pop_back();
a[i].id=i;
a[i].va=t;
q.push_back(a[i]);
}
}