CF--830--D

D2. Balance (Hard version)

//暴力玄学算法
#include <bits/stdc++.h>
using namespace std;
#define int long long

map<int,int>vis,mp;
map<int,set<int>>del,change;

signed  main() {
    ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    int TT;cin>>TT;
    while(TT--) {
        char op;
        int x;
        cin>>op>>x;
        if(op=='+') {
            vis[x]=1;
            for(auto y:change[x])del[y].erase(x);
            //这个数出现了,就把刚刚的那些数删去
        }
        if(op=='-') {
            vis[x]=0;
            for(auto y:change[x])del[y].insert(x);
            //这个数消失了,那可以产生影响的就全部插入
        }
        if(op=='?') {
            if(mp.count(x)==0)mp[x]=x;
            if(del[x].size())cout<<*del[x].begin()<<endl;
            else {
                while(vis[mp[x]]) {
                    change[mp[x]].insert(x);
                    //也就是记录当前这个数的出现会影响那些数的mex
                    mp[x]+=x;
                }
                cout<<mp[x]<<endl;
            }
        }
    }
    return 0;
}
posted @ 2022-12-27 09:55  basicecho  阅读(23)  评论(0)    收藏  举报