题意:
给[1,n],n个数,有两种操作:

1 x,删去x
2 x,查询还未被删去的数中大于等于x的最小的数是多少。

input:

output:

做法:按照并查集的方法压缩路径

代码:

#include<bits/stdc++.h>

using namespace std;
#define int long long
unordered_map<int,int> mp;
int getf(int x){
    if(!mp.count(x))
        return x;
    else{
        return mp[x]=getf(mp[x]);
    }
}
signed main(){
    int n,q;
    cin>>n>>q;
    while(q--){
        int x,y;
        scanf("%lld%lld",&x,&y);
        ){
            mp[y]=getf(y+);
        }else{
            printf("%lld\n",getf(y));
        }
    }
    ;
}
05-23 15:37