質問の意味:
1-N aの完全な配列を指定
操作1:[POS]を変更する[POS]は百万
操作2:最小と(Kを含む)すべての後続Q kと[1] -a [R]はどのように多くの数に等しくありません
N <= 1E5
#include <ビット/ STDC ++ H> 使用して 名前空間STDを、 #define担当者(I、B)(I =(A)がINT;方には<=(B); iが++) の#define repp(I、B)(I =(A)がINTのために、I> = (B); - I) の#defineは長い長いっ の#defineは(X)(CERR <<(#X)<< '=' <<(X)<< ENDL)を参照 の#define INF 0x3f3f3f3f の#define CLR( 、V)のmemset(A、V、はsizeof A) //////////////////////////////////// / CONST INT N = 2E6 + 10 。 INT MAXX [N << 2 ]、位置[N]。 無効アップ(int型のPOS) { MAXX [POS] = MAX(MAXX [POS << 1]、MAXX [POS << 1 | 1 ])。 } ボイドビルド(int型 L、int型の R、int型のPOS) { 場合(L == R){MAXX [POS] =ポジション[L]。リターン;} int型、M =(L + R)>> 1 。 ビルド(lは、mは、posが << 1);ビルド(M + 1、R、POS << 1 | 1 );アップ(POS)。 } ボイドアップノード(int型のx、int型の L、int型の R、int型のPOS) { 場合(L == R){MAXX [POS] = INF。リターン;} int型、M =(L + R)>> 1 。 もし(x <= M)アップノード(X、L、M、POS << 1 )。 他のアップノード(X、M + 1、R、POS << 1 | 1 )。 (POS)アップ。 } int型の照会(int型のx、int型の L、INT R、int型の L、int型の R、int型のPOS) { 場合(L == R) { 場合(MAXX [POS]> X)リターンL。 それ以外 の戻りINF。 } int型M =(L + R)>> 1。int型 ANS = infファイル。 もし(L <= M && MAXX [POS << 1 ]> X)ANS =分(ANS、クエリ(X、L、R、L、M、POS << 1 ))。 もし(!ANS = INF)の戻りANS; もし(R> M && MAXX [POS << 1 | 1 ]> X)ANS =分(ANS、クエリ(X、L、R、M + 1、R、POS << 1 | 1 ))。 戻るANSを。 } int型N、M、T1、T2、T3、lastans、F [N]。 INT のmain() { int型 CAS; CIN >> CAS。 { scanf関数(" %d個の%のD "、&N、&M)。int型のx; 担当者(I、1 、N) のscanf(" %dの"、&x)は、位置[X] = I、[I] = FをX。 位置[N + 1 ] = INF。 (ビルド1、N + 1、1); lastans = 0 。 一方、(M-- ) { int型、B、C; scanf関数(" %のD "、&A )。 もし(== 1 ) { scanf関数(" %のD "、&B)と、b ^ = lastans。 アップノード([B]、F 1、N + 1、1 )。 } 他 { scanf関数(" %d個の%のD "、&B、&C)と、b ^ = lastans; C ^ = lastans。 lastans =クエリ(B、C、N + 1、1、N + 1、1 )。 printf(" %d個の\ n " 、lastans)。 } } } 戻り 0 。 }
木の会長も書き込みに使用することができます