平衡树做法90分求助

P1886 滑动窗口 /【模板】单调队列

Albatross_LC @ 2023-09-03 17:21:13

平衡树做法T#9

#include "cstdio"
#include "vector"
#include "algorithm"
#include "string"
using namespace std;
int n, k, a[1000010];
int mx[1000010];
vector<int> e;
int read() {
    int ret = 0, sgn = 0, ch = getchar();
    while (!isdigit(ch)) sgn |= ch == '-', ch = getchar();
    while (isdigit(ch)) ret = ret * 10 + ch - '0', ch = getchar();
    return sgn ? -ret : ret;
}
main() {
    n = read(), k = read();
    for (int i = 1; i <= n; i ++ ) {
        a[i] = read();
        e.insert(upper_bound(e.begin(), e.end(), a[i]), a[i]);
        if (i >= k) {
            if (i > k) e.erase(lower_bound(e.begin(), e.end(), a[i - k]));
            mx[i] = e[k - 1];
            printf("%d ", e[0]);
        }
    }
    printf("\n");
    for (int i = k; i <= n; i ++ )
        printf("%d ", mx[i]);
}

想用平衡树试试,但T了,有没有大佬知道怎么回事,复杂度O(n\log n)


by 羊羊君的幻想 @ 2023-09-03 17:55:49

@DELA 手写二分的会比lowerbound快一点


by Albatross_LC @ 2023-09-03 17:56:15

@DELA ???


by Albatross_LC @ 2023-09-03 17:56:37

我只是想A了这道题啊


by DELA @ 2023-09-03 17:56:50

@羊羊君的幻想 STL 常数大我还是头一次听说。。常识是 工业中效率的作用比 OI 中大多了,你觉得你手写的两行代码常数吊打工业中使用的 STL?


by DELA @ 2023-09-03 17:57:58

@Albatross_LC 你想用平衡树 A 了这道题那你写个 vector 啥意思

vector 能 AC 普通平衡树那是数据弱。。vector 是 O(n) 的跟平衡树一点关系没有


by 羊羊君的幻想 @ 2023-09-03 18:01:55

@DELA 私信发你了,50ms的差距,这数据量才十万


by Albatross_LC @ 2023-09-03 18:02:14

@DELA 测评姬可以卡常数


by DELA @ 2023-09-03 18:06:32

@Albatross_LC 这跟你用 vector 当平衡树有什么关系啊?


by dbxxx @ 2023-09-03 18:32:11

这贴好搞笑.


by Failure_Terminator @ 2023-09-03 18:33:41

我他妈一直以为 vector insert/eraseO(n) 的,长见识了。


上一页 | 下一页