Pagini recente » Cod sursa (job #2320806) | Cod sursa (job #505610) | Cod sursa (job #2680490) | Cod sursa (job #264683) | Cod sursa (job #1843088)
#include <stdio.h>
#include <math.h>
#define N 100001
using namespace std;
int i, j, n, q, m, s, k, r, A[N], M[N][17];
int main()
{
freopen("rmq.in", "r", stdin);
freopen("rmq.out", "w", stdout);
scanf("%d%d", &n, &m);
s = sqrt(n);
for(i = 0; i < n; i++)
{
scanf("%d", &A[i]);
M[i][0] = i;
}
for(j = 1; 1 << j <= n; j++)
for(i = 0; i + (1 << j) <= n; i++)
if(A[M[i][j - 1]] < A[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(q = 0; q < m; q++)
{
scanf("%d%d", &i, &j);
i--;
j--;
for(k = 0; 1 << (k + 1) <= j - i + 1; k++);
if(A[M[i][k]] < A[M[j - (1 << k) + 1][k]]) r = A[M[i][k]];
else r = A[M[j - (1 << k) + 1][k]];
printf("%d\n", r);
}
}