Pagini recente » Cod sursa (job #1944247) | Cod sursa (job #709693) | Cod sursa (job #1027482) | Cod sursa (job #2292692) | Cod sursa (job #164870)
Cod sursa(job #164870)
#include <stdio.h>
#define nmax 100005
#define logmax 20
int N, M;
int RMQ[nmax][logmax], V[nmax], log[nmax];
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 (i = 2; i <= N; ++i)
{
log[i] = log[i-1];
log[i] += 1<<(log[i]+1) <= i;
}
for (i = 1; i <= N; ++i)
RMQ[i][0] = i;
for (l = 1; l <= log[N]; ++l)
for (i = 1, a = N-(1<<l)+1; i <= a; i++)
RMQ[i][l] = V[RMQ[i][l-1]] < V[RMQ[i+(1<<(l-1))][l-1]] ?
RMQ[i][l-1]: RMQ[i+(1<<(l-1))][l-1];
while (M--)
{
scanf("%d%d", &a, &b);
l = b-a+1;
printf("%d\n", V[V[RMQ[a][log[l]]] < V[RMQ[b-(1<<log[l])+1][log[l]]]? RMQ[a][log[l]]: RMQ[b-(1<<log[l])+1][log[l]] ]);
}
return 0;
}