Pagini recente » Cod sursa (job #1793092) | Cod sursa (job #1687468) | Cod sursa (job #975068) | Cod sursa (job #2006413) | Cod sursa (job #2341714)
#include <bits/stdc++.h>
#define NMAX 100000
#define LOGMAX 20
using namespace std;
int v[NMAX], M[NMAX][LOGMAX];
int main() {
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
int n, m, i, j, k, a, b;
scanf("%d%d",&n,&m);
for( i = 0; i < n; i ++ ) {
scanf("%d",&v[i]);
M[i][0] = i;
}
for( j = 1; (1 << j) <= n; j ++ )
for( i = 0; i + (1<<j) - 1 < n; i ++ ) {
if( v[M[i][j-1]] < v[M[i + (1 << ( j - 1 ))][j-1]] )
M[i][j] = M[i][j-1];
else
M[i][j] = M[i + (1 << ( j - 1 ))][j-1];
}
for( i = 1; i <= m; i ++ ) {
scanf("%d%d",&a,&b);
a --;
b --;
k = log2(b-a+1);
if( v[M[a][k]] < v[M[b - (1 << k ) + 1][k]] )
printf("%d\n",v[M[a][k]]);
else
printf("%d\n",v[M[b - (1 << k ) + 1][k]]);
}
return 0;
}