Pagini recente » Cod sursa (job #3149577) | Autumn Warm Up 2007 | Cod sursa (job #1969361) | Cod sursa (job #3233647) | Cod sursa (job #154905)
Cod sursa(job #154905)
#include<stdio.h>
#include<math.h>
const int Nmax=50001;
int A[Nmax],B[16][Nmax],N,M,pw2[17];
void cit()
{
int i;
freopen("rmq.in","r",stdin);
scanf("%d%d",&N,&M);
for(i=0;i<N;i++)
scanf("%d",&A[i]);
}
void pw2pp()
{
int i;
pw2[0]=1;
for(i=1;i<=16;i++)
pw2[i]=pw2[i-1]+pw2[i-1];
}
void preprocM()
{
int l=(int)log2(N),k=1,i,j;
for(i=0;i<N;i++)
B[0][i]=i;
for(i=1;i<=l;i++)
for(j=0;j<N-pw2[i]+1;j++)
B[i][j]=A[B[i-1][j]]<A[B[i-1][j+pw2[i-1]]] ? B[i-1][j] : B[i-1][j+pw2[i-1]];
}
int rmq(int a,int b)
{
int k=(int)log2(b-a+1);
return A[B[k][a]] < A[B[k][b-pw2[k]+1]] ? A[B[k][a]] : A[B[k][b-pw2[k]+1]];
}
void rez()
{
int i,a,b;
freopen("rmq.out","w",stdout);
int j;
for(i=0;i<M;i++)
{
scanf("%d%d",&a,&b);
printf("%d\n",rmq(a-1,b-1));
}
}
int main()
{
cit();
pw2pp();
preprocM();
rez();
return 0;
}