Pagini recente » Istoria paginii runda/pixelcup/clasament | Cod sursa (job #266521) | Istoria paginii runda/wellcodesimulareclasa10-13martie | Cod sursa (job #1139238) | Cod sursa (job #1464101)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin ("rmq.in") ;
ofstream fout ("rmq.out") ;
int N , M ;
int vec [100001] , RMQ [20][100001] ;
void Citire ()
{
fin >> N >> M ;
for ( int i = 0 ; i < N ; ++ i )
fin >> vec [i] ;
}
void RMQCONSTRUCT ()
{
for ( int i = 0 ; i < N ; ++ i )
RMQ [0][i] = vec [i] ;
for ( int i = 1 ; ( 1 << i ) < N ; ++ i )
for ( int j = 0 ; ( j + ( 1 << ( i - 1 ) ) ) < N ; ++ j )
RMQ [i][j] = min ( RMQ [i-1][j] , RMQ [i-1] [ j + ( 1 << ( i - 1 ) ) ] ) ;
}
int Query ( int a , int b )
{
int minim ;
int k = 0 ;
while ( ( 1 << k ) <= b - a + 1 )
++ k ;
-- k ;
return ( minim = min ( RMQ [k][a] , RMQ [k][ b - ( 1 << k ) + 1 ] ) ) ;
}
int main()
{
Citire () ;
RMQCONSTRUCT() ;
int x , y ;
for ( ; M ; -- M )
fin >> x >> y , fout << Query ( x - 1 , y - 1 ) << "\n" ;
return 0;
}