2021.07.22暑假集训(滑动窗口)
deque容器为一个给定类型的元素进行线性处理,像向量一样,它能够快速地随机访问任一个元素,并且能够高效地插入和删除容器的尾部元素。但它又与vector不同,deque支持高效插入和删除容器的头部元素,因此也叫做双端队列
deque<int>big,sml;
int n,k,num[maxn];
int main(){
cin>>n>>k;
for(int i=1;i<=n;i++) cin>>num[i];
for(int i=1;i<=n;i++){
while(!big.empty()&&num[big.front()]>num[i]) big.pop_front();
big.push_front(i);
if(big.back()<=i-k) big.pop_back();
if(i>=k) cout<<num[big.back()]<<" ";
}
cout<<endl;
for(int i=1;i<=n;i++){//这个单调是从左往右 增加的
while(!sml.empty()&&num[sml.front()]<num[i]) sml.pop_front();//如果比队首还大 那么就直接替换队首元素 队首元素没有机会了
sml.push_front(i); //不管什么都插入i这个数
if(sml.back()<=i-k) sml.pop_back(); //如果超过k这个范围了 就直接出栈
if(i>=k) cout<<num[sml.back()]<<" ";
}
return 0;
}

浙公网安备 33010602011771号