我有一个关于耗时的问题,有无大佬解决一下

P1440 求m区间内的最小值

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


上一页 |