题目: NC50528 滑动窗口 ,哈哈,我们今天来看一道稍微复杂一点的题嘛,这是选自牛客上的一道题,好了,我们一起来看看题意吧:
考虑到直接复制题目,或者截屏的方式不是很方便阅读,我就把直接题目链接放下面!
题目传送门: NC50528 滑动窗口
思路
:
单调队列的模板题,没什么好说的!
我们来看看成功AC的代码吧:
#include<bits/stdc++.h> using namespace std; int n,k; const int N=1000010; int a[N]; deque<int> q; int main(){ ios::sync_with_stdio(false); cin>>n>>k; for(int i=1;i<=n;i++) cin>>a[i]; for(int i=1;i<=n;i++){ if(i-k>=q.front()) q.pop_front();//判断是否越界 while(!q.empty()&&a[q.back()]>=a[i]) q.pop_back(); q.push_back(i); if(i-k>=0){ cout<<a[q.front()]<<" "; } } while(!q.empty()) q.pop_back();//清空 cout<<"\n"; for(int i=1;i<=n;i++){ if(i-k>=q.front()) q.pop_front(); while(!q.empty()&&a[q.back()]<=a[i]) q.pop_back(); q.push_back(i); if(i-k>=0){ cout<<a[q.front()]<<" "; } } return 0; }