int型のツリー[ 4 * N]; ボイドビルド(INT O、INT L、INT R){ 場合(L == R){CIN >>ツリー[O]。返す;} (LS、L、中間)を構築します。 構築(RS、ミッド + 1 、R); ツリー[O] = MAX(ツリー[LS]、ツリー[RS])。 } INT GET(int型、O INTの L、INT R、INT X){ 場合(L == R)戻りL。 リターン・ツリー[LS]> X?取得する(LS、L、MID、X):GET(RS、MID + 1 は、R、X); } int型クエリ(INT O、INT L、INT R&LT、INT QL、INT QR、INT X){ // クエリ[QL 、QR] xの位置の最初の数よりも大きい IF(QR <|| R&LT L <QL)リターン - 1。; IF(QL <= R&LT && L <= QR)を返すツリー[O]> X?GET( O、Lは、R、X): - 。1 ; INT T = クエリ(LS、L、MID、QL、QR、X); 戻り!T = - 。1?T:クエリ(RS、ミッド+ 1 、R、QL、QR、X)。 }