Pagini recente » Cod sursa (job #1710147) | Cod sursa (job #3165299) | Cod sursa (job #2654216) | Monitorul de evaluare | Cod sursa (job #3215709)
#include <bits/stdc++.h>
using namespace std;
ifstream in("rmq.in");
ofstream out("rmq.out");
const int NMAX = 1e5 + 5;
const int LGMAX = 17;
int lg2[NMAX];
int v[NMAX], dp[18][NMAX];
int main()
{
int n, m;
in >> n >> m;
for( int i = 1; i <= n; i++ ){
in >> v[i];
dp[0][i] = v[i];
}
for( int i = 1; (1 << i) <= n; i++ )
for( int j = 1; j + ( 1 << i ) - 1 <= n; j++ )
dp[i][j] = min( dp[i-1][j + ( 1 << (i-1) ) ], dp[i-1][j] );
for( int i = 2; i <= n; i++ )
lg2[i] = lg2[i/2] + 1;
while( m-- ){
int a, b;
in >> a >> b;
int lung = b-a+1;
int lg = lg2[lung];
out << min( dp[lg][a] , dp[lg][b - (1 << lg) + 1]) << endl;
}
return 0;
}