大概就是这道题,不处理重复元素的话只有52pts,所以如何处理重复元素?
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#define I64 "%d"
__gnu_pbds::tree<int, __gnu_pbds::null_type, std::less<int>, __gnu_pbds::rb_tree_tag, __gnu_pbds::tree_order_statistics_node_update> data;
signed main(){
int n;
scanf(I64, &n);
for(int i = 1; i <= n; i++){
int op, x;
scanf(I64 I64, &op, &x);
if(op == 1){
data.insert(x);
}else if(op == 2){
data.erase(x);
}else if(op == 3){
printf(I64 "\n", data.order_of_key(x) + 1);
}else if(op == 4){
printf(I64 "\n", *data.find_by_order(x - 1));
}else if(op == 5){
printf(I64 "\n", *data.find_by_order(data.order_of_key(x) - 1));
}else{
printf(I64 "\n", *data.find_by_order(data.order_of_key(x)));
}
}
return 0;
}
我觉得大概是用pair<int,int>这种东西,但是具体不清楚,麻烦大佬帮忙改下