Pagini recente » Cod sursa (job #1068651) | Cod sursa (job #1644596) | Cod sursa (job #1319388) | Cod sursa (job #3259644) | Cod sursa (job #754586)
Cod sursa(job #754586)
#include <cstdio>
#include <cstdlib>
#include <cmath>
using namespace std;
int M[100000][17], n, m, A[100000];
int process()
{
int i, j;
for(i = 0; i < n; i++) M[i][0] = i;
for(j = 1; (1 << j) <= n; j++)
{
for(i = 0; i + (1 << j) - 1 < 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];
}
}
}
}
int main()
{
freopen("rmq.in", "r", stdin);
freopen("rmq.out", "w", stdout);
int i, x, y, k;
scanf("%i %i", &n, &m);
for(i = 0; i < n; i++) scanf("%i", &A[i]);
process();
for(i = 0; i < m; i++)
{
scanf("%i %i", &x, &y);
x--; y--;
k = (int)log2(y - x + 1);
if(A[M[x][k]] <= A[M[y - (1 << k) + 1][k]]) printf("%i\n", A[M[x][k]]);
else printf("%i\n", A[M[y - (1 << k) + 1][k]]);
}
scanf("%i", &i);
return 0;
}