kaito_936 @ 2024-04-09 20:43:18
这个题目对时间不是很苛刻吗,所以我试了一个下午,包括偷看别人的代码,我就发现一个问题,为什么代码明明差不多,举个例子:这题不是用单调队列吗,我就用的一个数组,然后定义一个开始位置和结束位置。结果是耗时稳定在930ms,但是有个和我代码差不多的用的容器耗时640ms,然后我也就用了容器,但是还是稳定930ms,这是为什么啊(我还没有接触过数据结构与算法),纠结了我一个下午了。
#include<iostream>
#include<deque>
using namespace std;
int N, M, a1[2000001];
deque<int> arr;
int main()
{
cin >> N >> M;
printf("0\n");
for (int i = 1; i < N; i++) {
scanf_s("%d", a1 + i);
while ( !arr.empty()&& a1[arr.back()] >= a1[i]) arr.pop_back();
arr.push_back(i);
if (i - arr.front() == M) arr.pop_front();
printf("%d\n", a1[arr.front()]);
}
return 0;
}
by kaito_936 @ 2024-04-09 20:57:27
@Po7ed 真的欸。我去学习一下这个是啥
by kaito_936 @ 2024-04-09 20:59:18
@Po7ed 终究是我太弱了
by kaito_936 @ 2024-04-09 21:04:31
@Po7ed 是啊,因为要节约时间就用的这个,但是写了那个之后用cout和cin要快一点好像,用之前930ms,用之后640ms