Pagini recente » Cod sursa (job #1588245) | Cod sursa (job #1290382) | Cod sursa (job #1194506) | Cod sursa (job #1237370) | Cod sursa (job #155973)
Cod sursa(job #155973)
#include <stdio.h>
#define minim(a, b) ((a < b) ? a : b)
#define NMax 100005
long int N, M, A[18][NMax], p[NMax];
int main(void)
{
long int i, x, y, h;
freopen("rmq.in", "r", stdin);
freopen("rmq.out", "w", stdout);
scanf("%ld %ld", &N, &M);
for (i = 1; i <= N; ++i)
scanf("%ld", &A[0][i]);
for (h = 1; ((long int)1<<h) <= N; h++)
for (i = 1; i <= N; ++i)
{
A[h][i] = A[h-1][i];
if (i+((long int)1<<(h-1)) <= N)
A[h][i] = minim(A[h][i], A[h-1][i+((long int)1<<(h-1))]);
}
for (i = 2; i <= N; ++i)
p[i] = p[i/2] + 1;
for (; M; --M)
{
scanf("%ld %ld", &x, &y);
h = p[y-x+1];
printf("%ld\n", minim(A[h][x], A[h][y-((long int)1<<h)+1]));
}
return 0;
}