Pagini recente » Cod sursa (job #2817240) | Cod sursa (job #416286) | Cod sursa (job #416801) | Cod sursa (job #53542) | Cod sursa (job #2240399)
#include <iostream>
#include <fstream>
using namespace std ;
ifstream f ( "rmq.in" ) ;
ofstream g ( "rmq.out") ;
const int N = 17 ;
const int M = 100005 ;
int main ()
{
int n , m , s [ M ] , i , j , a [ M ][ N ] , l [ M ] ;
f >> n >> m ;
for ( i = 0 ; i < n ; i ++ ) f >> s [ i ] ;
for ( i = 0 ; i < n ; i ++ ) a[ i ][ 0 ] = i ;
for ( j = 1 ; ( 1 << j ) <= n ; j ++ )
for ( i = 0 ; i + ( 1 << j ) - 1 < n ; i ++ )
if ( s[ a[ i ][ j - 1 ] ] < s [ a[ i + ( 1 << ( j - 1 ) ) ][ j - 1 ] ] )
a[ i ][ j ] = a[ i ][ j - 1 ] ;
else
a[ i ][ j ] = a[ i + ( 1 << ( j - 1 ) ) ][ j - 1 ] ;
for ( i = 2 ; i <= n ; i *= 2 ) l [ i ] = 1 ;
for ( i = 3 ; i <= n ; i ++ ) l [ i ] += l [ i - 1 ] ;
while ( m -- )
{
int st , dr , p ;
f >> st >> dr ;
st -- ; dr -- ;
i = dr - st + 1 ;
i = l [ i ] ;
p = 1 << i ;
g << min ( s [ a [ st ][ i ] ] , s [ a [ dr - p + 1 ][ i ] ] ) << "\n" ;
}
return 0 ;}