1の#include <ビット/ STDC ++ H> 2 3 使用して 名前空間STDを、 4 5 CONST INT N = 1E5 + 5 。 6 7 INTを F [N] [ 30 ]、[N]。 8 9 int型リード(){ 10 、INT X = 0、フラグ= 1 。 11 CHAR CH = GETCHAR()。 12 一方(isdigit(CH)!){ 場合(CH == ' - ')フラグ= - 1 ; CH = GETCHAR();} 13 一方、(isdigit(CH)){X =(x << 3)+(X << 1)+(CH ^ 48)。CH = GETCHAR();} 14 リターン X * フラグ。 15 } 16 17 int型のmain(){ 18 19 INT N = (読み取り) 20 INT M = 読み取ります()。 21 // ³õʼ»¯ 22 のために(INT iは= 1 ; iが<= N; I ++)F [i]が[ 0 ] = )(読み取ります。 23 // ½¨Á¢ST±í 24 INT MAXN = LOG(N)/ログ(2)+ 1。// ÉϽç 25 のために(INT J = 1 ; J <MAXN; J ++ ){ 26 のための(INTは私= 1 ; I <= N + 1 - (1 << J)、I ++ ){ 27 F [I] [J] = MAX(F [I] [J- 1 ]、F [I +(1 << J- 1)] [J- 1 ])。 28 } 29 } 30 // ²éѯ 31 のために(INT iは= 1 ; iが<= M; I ++ ){ 32 int型 L = )(読み取ります。 33 INT R = 読み取り()。 34 int型 K =ログ(R-L + 1)/ログ(2)。// Ͻç 35 のprintf(" %D \ n "、MAX(F [L] [K]、F [R + 1 - (1 << K)] [K]))。 36 } 37 リターン 0 。 38 }