写了个单调队列,很自信能一遍过,结果卡70pts,TLE3个点,在那边调了半天没发现算法还能优化。
#include<bits/stdc++.h>
using namespace std;
int n,m,a[2000000];
deque<int> q;
int main(){
cin >> n >> m >> a[0];
q.push_back(0);
cout << 0 << "\n";
for (int i=1;i<n;i++){
cin >> a[i];
cout << a[q.front()] << "\n";
if(q.front()==i-m) q.pop_front();
while(!q.empty()){
if(a[q.back()]>=a[i]) q.pop_back();
else break;
}
q.push_back(i);
}
return 0;
}
最后发现这题居然卡cin,真的服了。
可以关同步流或者改用scanf,又或者干脆快读。
ios_base::sync_with_stdio(false);