Pagini recente » Cod sursa (job #588756) | Profil VladuZ1338 | Cod sursa (job #2042046) | Cod sursa (job #331348) | Cod sursa (job #154865)
Cod sursa(job #154865)
#include <stdio.h>
#define nm 100
long A[nm];
long M[20][nm];
int Lg[nm];
long n, m;
void preproc()
{
int i, j;
for (i=1; i<=n; ++i)
M[0][i]=A[i];
for (j=1; (1<<j)<=n; ++j)
for (int i=1; i+(1<<j)-1<=n; ++i)
if (M[j-1][i]<M[j-1][i+(1<<(j-1))])
M[j][i]=M[j-1][i];
else
M[j][i]=M[j-1][i+(1<<(j-1))];
}
int main()
{
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
scanf("%ld%ld", &n, &m);
int i;
for (i=1; i<=n; ++i) scanf("%ld", A+i);
preproc();
for (i=2; i<=n; ++i) Lg[i]=Lg[i/2]+1;
for (i=1; i<=m; ++i)
{
long x, y;
scanf("%ld%ld", &x, &y);
int k=Lg[y-x+1];
if (M[k][x]<M[k][y-(1<<k)+1])
printf("%ld\n", M[k][x]);
else
printf("%ld\n", M[k][y-(1<<k)+1]);
}
return 0;
}