看了好多篇别人写的题解,感觉好像不少用unordered_map的都有点错误,于是自己来写一篇。
#include<bits/stdc++.h> using namespace std; #define maxn 300005 #define ll long long const int mod = 1e9 + 7; unordered_map<int,int>f; int n,q,x,op,k; int find(int x){ if(!f[x])return x; else return f[x]=find(f[x]); } int main() { scanf("%d%d",&n,&q); while(q--){ scanf("%d%d",&op,&x); if(op==1)f[x]=find(x+1); else{ if(!f[x])printf("%d ",x); else{ k=find(x); if(k>n)printf("-1 "); else printf("%d ",k); } } } }