题目链接:so easy
题意:长度为 n 的序列,m 次操作,每次两种操作 1 x 表示 x 这个下标不可用,2 x 查询 x (包括 x )之后的第一个可用的下标
思路:
- n 是 1e9 所以用 map 代替数组,但是直接用 map 会 T,改成 unorder_map 就OK了
- 离散化也可以过,毕竟 m 只有 1e6
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<algorithm>
#include<queue>
#include<stack>
#include<vector>
#include<map>
#include<set>
#include<unordered_map>
#define inf 0x3f3f3f3f
using namespace std;
typedef long long ll;
const int N = 1010;
int n;
unordered_map<int, int> fa;
int fin(int x)
{
if(fa[x] == 0) return x;
return fa[x] = fin(fa[x]);
}
int main()
{
int m, a, b;
fa.clear();
scanf("%d %d", &n, &m);
for(int i = 0; i < m; i++)
{
scanf("%d %d", &a, &b);
if(a == 1)
{
int p = fin(b);
int q = fin(b + 1);
if(p != q)
{
fa[p] = q;
}
}
else
{
int now = fin(b);
printf("%d\n", now);
}
}
return 0;
}