そう簡単(互いに素セット+ unordered_map)

ある  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 
}

 




おすすめ

転載: www.cnblogs.com/wjc2021/p/11493050.html