Pagini recente » Cod sursa (job #1946840) | Cod sursa (job #2990900) | Cod sursa (job #2976540) | Cod sursa (job #1791940) | Cod sursa (job #3122414)
#include <fstream>
using namespace std;
ifstream in("rmq.in");
ofstream out("rmq.out");
long long dr = 16 ;
long long rmq [ 100001 ] [ 17 ];
long long v [ 200005 ] ;
long long log2(long long n )
{
long long poz = 0 ;
while ( (1 << ( poz + 1) ) <= n )
poz ++;
return poz ;
}
long long q;
int main()
{
long long n , m ;
cin >> n >> q ;
for ( int i = 1; i <= n ; i ++ )
{
cin >> v[ i ] ;
}
for ( int i = 1; i <= n ; i ++ )
{
rmq [ i ] [ 0 ] = v[ i ] ;
}
long long x = log2(n);
for ( int j = 1; j <= 16 ; j ++ )
{
for ( int i = 1; i + (1 << j ) - 1 <= n ; i ++ )
{
rmq [ i ] [ j ] = min ( rmq [ i ] [ j - 1 ] , rmq [ i + (1<<(j-1)) ] [ j - 1 ] );
}
}
for ( int i = 1; i <= q ; i ++ )
{
long long a , b ;
cin >> a >> b;
long long d = b - a + 1 ;
long long y = log2(d);
cout << min ( rmq [ a ] [ y ] , rmq [ b - (1<<y) + 1 ] [ y ]) << '\n';
}
return 0;
}