Pagini recente » Cod sursa (job #2055692) | Cod sursa (job #252016) | Cod sursa (job #889014) | Cod sursa (job #271266) | Cod sursa (job #158200)
Cod sursa(job #158200)
//rmq
# include <stdio.h>
# define nmax 100001
# define FIN "rmq.in"
# define FOUT "rmq.out"
long M[18][nmax],A[nmax],n,m,i,j,k,log[nmax],x,y;
int main()
{
freopen(FIN,"r",stdin);
freopen(FOUT,"w",stdout);
scanf("%ld %ld",&n,&m);
for (i=1; i<=n; i++)
{
scanf("%ld",&A[i]);
M[0][i]=A[i];
}
log[1]=0;
for (i=2; i<=n; i++)
log[i]=log[i >> 1] + 1;
for (i=1; (1 << i)<=n; i++)
for (j=1; j+(1 << i)-1<=n; j++)
if (M[i-1][j]<M[i-1][j+(1 << (i-1))])
M[i][j]=M[i-1][j];
else
M[i][j]=M[i-1][j+ (1 << (i-1))];
for (i=1; i<=m; i++)
{
scanf("%ld %ld",&x,&y);
k=log[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;
}