各色ベクトルメンテナンス位置が表示されると、エンドポイントの半分、は、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 } } }