题目链接
题意
滑动窗口求a[i]到a[i+k]的最小值和最大值
思路
- 根据题意模拟即可
参考代码
#include<bits/stdc++.h>
using namespace std;
int aa[1000100];
int maxa[1000100],mina[1000100];
deque<int> maxq;
deque<int> minq;
int main()
{
int n,k;
cin>>n>>k;
for(int i=0; i<n; i++)
{
cin>>aa[i];
}
int pos=0;
for(int i=0; i<n; i++)
{
while(!maxq.empty()&&maxq.front()<=i-k)
maxq.pop_front();
while(!minq.empty()&&minq.front()<=i-k)
minq.pop_front();
while(!maxq.empty()&&aa[maxq.back()]<=aa[i])
maxq.pop_back();
while(!minq.empty()&&aa[minq.back()]>=aa[i])
minq.pop_back();
maxq.push_back(i);
minq.push_back(i);
if(i>=k-1)
{
maxa[pos]=aa[maxq.front()];
mina[pos]=aa[minq.front()];
pos++;
}
}
for(int i=0; i<pos; i++)
{
if(i!=pos-1)
cout<<mina[i]<<" ";
else
cout<<mina[i]<<endl;
}
for(int i=0; i<pos; i++)
{
if(i!=pos-1)
cout<<maxa[i]<<" ";
else
cout<<maxa[i]<<endl;
}
}