Pagini recente » Cod sursa (job #537621) | Cod sursa (job #2148365) | Cod sursa (job #2375663) | Cod sursa (job #2285033) | Cod sursa (job #2323131)
#include <bits/stdc++.h>
#define pb push_back
#define sz size()
using namespace std ;
const int NR = 100001 ;
ifstream f ("darb.in") ;
ofstream g ("darb.out") ;
int level [ NR ] , last ;
const int NMAX = 100001 ;
const int LOGNMAX = 20;
int rmq [ LOGNMAX ][ NMAX ] ;
int lg [ NMAX ] ;
int v[ NMAX ] , n ;
void rmq_sol3 ( )
{
int i ,j ;
for ( i = 1 ; i <= n ; ++ i ) rmq [ 0 ][ i ] = v [ i ] ;
for ( i = 1 ; ( 1 << i ) <= n ; ++ i )
for ( j = 1 ; j + ( 1 << i ) <= n + 1 ; ++ j )
rmq [ i ][ j ] = min ( rmq [ i - 1 ][ j ] , rmq [ i - 1 ][ j + ( 1 << ( i - 1 ) ) ] ) ;
for ( i = 2 ; i <= n ; ++ i ) lg [ i ] = lg [ i >> 1 ] + 1 ;
}
int query_sol3 ( int a , int b )
{
if ( a > b ) swap ( a , b ) ;
int log = lg [ b - a + 1 ] ;
return min ( rmq [ log ][ a ] , rmq [ log ][ b - ( 1 << log ) + 1 ] ) ;
}
int main ()
{
int q ; f >> n >> q ;
for ( int i = 1 ; i <= n ; ++ i ) f >> v[ i ];
rmq_sol3 ( ) ;
while ( q -- )
{
int a , b ; f >> a >> b ;
g << query_sol3 ( a , b ) << "\n" ;
}
}