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) 的,也就是说总的最坏复杂度为 O(n2)。请问何时能取到最坏复杂度?为什么在本题的情况下跑不满?