求助vector维护普通平衡树的复杂度
查看原帖
求助vector维护普通平衡树的复杂度
137367
hensier楼主2024/10/9 19:57

RT,在题解区看到以下的 vector 解法:

#include <bits/stdc++.h>
using namespace std;
int n;
vector<int> v;
// 此处省略快读快写
int main() {
    read(n);
    for (int i = 1, opt, x; i <= n; i++) {
        read(opt), read(x);
        switch (opt) {
            case 1: {
                v.insert(lower_bound(v.begin(), v.end(), x), x);
                break;
            }
            case 2: {
                v.erase(lower_bound(v.begin(), v.end(), x));
                break;
            }
            case 3: {
                write(lower_bound(v.begin(), v.end(), x) - v.begin() + 1);
                pc('\n');
                break;
            }
            case 4: {
                write(v[x-1]);
                pc('\n');
                break;
            }
            case 5: {
                write(*(lower_bound(v.begin(), v.end(), x) - 1));
                pc('\n');
                break;
            }
            case 6: {
                write(*upper_bound(v.begin(), v.end(), x));
                pc('\n');
                break;
            }
        }
    }
    fwrite(obuf, p3 - obuf, 1, stdout);
    return 0;
}

vector.insert 最坏情况下是 O(n)\mathcal O(n) 的,也就是说总的最坏复杂度为 O(n2)\mathcal O(n^2)。请问何时能取到最坏复杂度?为什么在本题的情况下跑不满?

2024/10/9 19:57
加载中...