Pagini recente » Cod sursa (job #132625) | Cod sursa (job #162175) | Cod sursa (job #2004010) | Cod sursa (job #869096) | Cod sursa (job #418914)
Cod sursa(job #418914)
#include<stdio.h>
#define Nmax 100100
long mat[20][Nmax];
int min(long a,long b)
{
if(a<b)
return a;
else
return b;
}
int main()
{
long log[Nmax];
long n,m,vec[Nmax],x,y;
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
scanf("%ld %ld",&n,&m);
int i=0,j=0;
log[0]=-1;
for(i=1;i<=n;i++)
{
scanf("%ld",&vec[i]);
mat[0][i]=vec[i];
log[i]=log[i>>1]+1;
}
for(j=1;j<=log[n];j++)
for(i=1;i+(1<<(j-1))<=n;i++)
mat[j][i]=min(mat[j-1][i],mat[j-1][i+(1<<(j-1))]);
int k;
for(i=1;i<=m;i++)
{
scanf("%ld %ld",&x,&y);
k=log[y-x+1];
printf("%ld\n",min(mat[k][x],mat[k][y-(1<<k)+1]));
}
return 0;
}