[説明] luogu_P3939_色の数(ベクトル二部

各色ベクトルメンテナンス位置が表示されると、エンドポイントの半分、は、UpperBoundによって右の点、また、為替についての直接交流のベクトルへ

<ビット/ STDC ++ H>の#include
 の#define PB一back
 使用 名前空間STDを、
const  int型 MAXN = 300009 ;
整数N、M。
構造体ノード{
     INT W COL、。
} [MAXN]。
ベクター < INT > C [MAXN]。// 颜色X出现位置
INT メイン(){ 
    scanf関数(" %D%D "、&​​N、&M)。
    以下のためにINT iが= 1、X、; I <= N; I ++ ){ 
        scanf関数(" %のD "、&x)は、 
        C [X] .pb(I)。
        [I] .COL = X [i]は.W = C [X] .size() - 1 ; 
    } 
    のためのINT iは= 1、OP、X、Y、Z、I <= M; I ++ ){ 
        scanf関数(" %のD "、&OP)。
        もし(OP == 1 ){ 
            scanf関数(" %D%D%D "、およびX&Y、およびZ)。
            もし(C [Z] .size()== 0 ){ 
                のprintf(" 0 \ n "); 続け; 
            } 
            INTPOS1 = LOWER_BOUND(C [Z])(.begin、C [Z] .END()、X) - X。C [Z] .begin()。
            INT POS2 = UPPER_BOUND(C [Z])(.begin、C [Z] .END()、Y)-c [Z](.begin)。// 查右端点用上部 
            のprintf(" %D \ n "、pos2- POS1)。
        } 
        { 
            scanf関数(" %のD "、&x)は、
            もし([X] .COL == A [X + 1 ] .COL)続けます
            C [X] .COL] [X] .W] = X + 1 
            C [[X + 1 ] .COL] [[X + 1 ] .W = ])。
            スワップ([X]、[X + 1 
        } 
    } 
}

 

 

 

おすすめ

転載: www.cnblogs.com/superminivan/p/11808877.html