RMQ問題&STアルゴリズム

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 }

 

おすすめ

転載: www.cnblogs.com/zhangqiling/p/12464617.html