警钟撅烂(如果你卡70pts)
查看原帖
警钟撅烂(如果你卡70pts)
617257
Kmystery楼主2025/7/22 17:06

写了个单调队列,很自信能一遍过,结果卡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);//关闭同步流
2025/7/22 17:06
加载中...