Pagini recente » Cod sursa (job #3216347) | Cod sursa (job #2317639) | Cod sursa (job #1922620) | Cod sursa (job #2633327) | Cod sursa (job #1449455)
#include <stdio.h>
#include <math.h>
#define Dim 100010
int N,M,T[Dim][18],A[Dim],Lg;
int main()
{
int X,Y,i,j;
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
scanf("%d %d",&N,&M);
for (i = 0;i < N;i++)
scanf("%d",&A[i]);
for (i = 0;i < N;i++)
T[i][0] = i;
for (j = 1;1 << j <= N;j++)
for (i = 0;i + (1 << j) <= N;i++)
if (A[T[i][j-1]] <= A[T[i+(1 << (j-1))][j-1]])
T[i][j] = T[i][j-1];
else
T[i][j] = T[i+(1 << (j-1))][j-1];
for (i = 1;i <= M;i++)
{
scanf("%d %d",&X,&Y);
X--;
Y--;
int L = trunc(log2(Y - X + 1));
if (A[T[X][L]] <= A[T[Y-(1 << L)+1][L]])
printf("%d\n",A[T[X][L]]);
else
printf("%d\n",A[T[Y-(1 << L)+1][L]]);
}
return 0;
}