题目:
代码:3个点超时,懵逼:
#include<bits/stdc++.h>
using namespace std;
int m,n;
int A[2000005];
int main()
{
cout<<0<<endl;
cin>>m>>n;
deque<int> dq;
cin>>A[0];
cout<<A[0]<<endl;
dq.push_back(0);
for(int i=1;i<n;i++)
{
scanf("%d",&A[i]);
while(!dq.empty())
{
if(A[dq.back()]>=A[i]) dq.pop_back();
else break;
}
dq.push_back(i);
cout<<A[dq.front()]<<endl;
}
for(int i=n;i<m-1;i++)
{
scanf("%d",&A[i]);
while(!dq.empty())
{
if(A[dq.back()]>=A[i]) dq.pop_back();
else break;
}
dq.push_back(i);
if(dq.front()<i-n+1) dq.pop_front();
cout<<A[dq[0]]<<endl;
}
}
题解差不多:
题解:
1.不存下标,创了个结构体里面放了下标和值。
2.压缩了循环和判断条件,代码简洁了很多。
但我的超时感到懵逼。