There are nn points in an array with index from 11 to nn, and there are two operations to those points.
1: 1 \ x1 x marking the point xx is not available
2: 2 \ x2 x query for the index of the first available point after that point (including xx itself) .
Input
n\quad qnq
z_1 \quad x_1z1x1
\vdots⋮
z_q\quad x_qzqxq
qq is the number of queries, zz is the type of operations, and xx is the index of operations. 1≤x<n<10^91≤x<n<109, 1 \leq q<10^61≤q<106 and zz is 11 or 22
Output
Output the answer for each query.
样例输入复制
5 3 1 2 2 2 2 1
样例输出复制
3 1
#include<bits/stdc++.h>
using namespace std;
unordered_map<int,int> fa;
int findfa(int x){
if(!fa.count(x)) return x;//x 为根,直接返回x
return fa[x]=findfa(fa[x]);
}
int main(){
int n,q;
scanf("%d %d",&n,&q);
while(q--)
{
int op,x;
scanf("%d %d",&op,&x);
if(op==1)
fa[x]=findfa(x+1);
else{
int ans;
ans=findfa(x);
if(ans>n) ans=-1;
printf("%d",ans);
}
}
return 0;
}