pb_ds 平衡树 40 分 WA 求调

P6136 【模板】普通平衡树(数据加强版)

oddy @ 2023-01-11 09:27:29

如题,这是代码。

ans 表示最近一次询问操作的答案,xors 表示所有询问的答案异或起来。

#include <cstdio>
#include <utility>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>

using namespace std;
using namespace __gnu_pbds;

typedef pair<int, int> pii;

int n, m, op, x, ans, xors;
tree<pii, null_type, less<pii>, rb_tree_tag, tree_order_statistics_node_update> t;

int main() {
    scanf("%d%d", &n, &m);
    while(n--) scanf("%d", &x), t.insert({x, -n});
    for(int i = 1; i <= m; i++) {
        scanf("%d%d", &op, &x);
        x ^= ans;
        switch (op) {
        case 1: t.insert({x, i}); break;
        case 2: t.erase(t.lower_bound({x, 0})); break;
        case 3: ans = t.order_of_key({x, 0}) + 1; break;
        case 4: ans = t.find_by_order(x - 1)->first; break;
        case 5: ans = (--t.lower_bound({x, 0}))->first; break;
        case 6: ans = t.upper_bound({x, 114514})->first; break;
        }
        if(op > 2) xors ^= ans;
    }
    printf("%d\n", xors);
    return 0;
}

|