Pagini recente » Cod sursa (job #829937) | Cod sursa (job #2048041) | Cod sursa (job #100865) | Cod sursa (job #19176) | Cod sursa (job #164854)
Cod sursa(job #164854)
#include <stdio.h>
#define nmax 100005
#define logmax 20
int N, M, logN;
int RMQ[nmax][logmax], V[nmax];
int pozmin(int x, int y)
{
return V[x] < V[y]? x: y;
}
int main()
{
int i, l, a, b;
freopen("rmq.in", "r", stdin);
freopen("rmq.out", "w", stdout);
scanf("%d%d", &N, &M);
for (i = 1; i <= N; ++i)
scanf("%d", &V[i]);
for (logN = 0; (1<<logN) <= N; logN++);
if ((1<<logN) > N) logN--;
for (i = 1; i <= N; ++i)
RMQ[i][0] = i;
for (l = 1; l <= logN; ++l)
for (i = 1; i <= N-(1<<l)+1; i++)
RMQ[i][l] = pozmin(RMQ[i][l-1], RMQ[i+(1<<(l-1))][l-1]);
while (M--)
{
scanf("%d%d", &a, &b);
for (logN = 0; (1<<logN) <= b-a+1; logN++);
if ((1<<logN) > b-a+1) logN--;
printf("%d\n", V[pozmin(RMQ[a][logN], RMQ[b-(1<<logN)+1][logN])]);
}
return 0;
}