AcWing 154. 滑动窗口
原题链接
简单
作者:
acw_yxy
,
2020-11-01 14:11:02
,
所有人可见
,
阅读 301
(模拟队列) $O(n)$
C++ 代码
#include <iostream>
#include <vector>
using namespace std;
vector<int> vec;
const int N = 1000010;
int q[N], hh = 0, tt = 0;
int main()
{
cin.tie(0);
ios::sync_with_stdio(false);
int num, k, temp;
cin >> num >> k;
for(int i = 0; i < num; i++)
{
cin >> temp;
vec.push_back(temp);
}
for(int i = 0; i < num; i++)
{
if(hh != tt && i - q[hh] >= k) hh++;
while(hh != tt && vec[i] <= vec[q[tt-1]]) tt--;
q[tt++] = i;
if(i >= k-1) cout << vec[q[hh]] << " ";
}
cout << endl;
hh = 0, tt = 0;
for(int i = 0; i < num; i++)
{
if(hh != tt && i - q[hh] >= k) hh++;
while(hh != tt && vec[i] >= vec[q[tt-1]]) tt--;
q[tt++] = i;
if(i >= k-1) cout << vec[q[hh]] << " ";
}
return 0;
}