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;
}