ある nはn個の点のインデックスを持つアレイ内から 1 〜1 N 、N、及びこれらのポイントには2つの動作があります。
1: 1つの\ X 1つの、Xマーキングポイント のx xは使用できません。
2: 2 \ X 2 (含むその時点の後の最初の利用可能なポイントのインデックスのX照会 X 自体X)。
入力
N \クワッドq個のn個のQ
Z_1 \クワッドX_1のZ 1 のx 1
\ vdots ⋮
z_q \クワッドx_q Z のq のx Q
QのQは、クエリの数であり、 Z zは動作のタイプであり、そして XのXは、動作の指標です。 1≤x<N <10 ^ 9 1 ≤ X < N < 1 0 9は、 1つの\当量Qは<10 ^ 6 1 ≤ Q < 1個の0 6及び Zのzは 1 1または 2 2
出力
出力各クエリのための答え。
サンプル入力
5 3 1 2 2 2 2 1
サンプル出力
3 1
#include <ビット/ STDC ++ H> 使用して名前空間STDを、 const int型 MAXN = 1E5 + 100 。 unordered_map < int型、int型 > FA; int型 findfa(int型x)は{ 場合(!fa.count(x))がリターンX; 戻り FA [X] = findfa(FA [X])。 } int型のmain(){ int型N、Q。 scanf関数(" %d個の%のD "、&N、&Q)。 int型のOP、X; 一方、(q-- ){ scanf関数( " %d個%のD "、&OP、およびX) もし(OPの== 1 ){ FA [X] = findfa(X + 1 )。 } 他{ int型 ANS = findfa(X)。 もし(ANS> N)ANS = - 1 。 printf(" %d個の\ n " 、ANS)。 } } 戻り 0 。 }