Pagini recente » Cod sursa (job #37922) | Cod sursa (job #3235197) | Cod sursa (job #2552180) | Cod sursa (job #2798297) | Cod sursa (job #311777)
Cod sursa(job #311777)
#include<stdio.h>
#include<math.h>
int a[100001],rm[20][100001],i,n,m;
int min(int c,int v)
{ if(c<v)
return c;
return v;
}
void constr()
{ int l=1;
for(i=1;(1<<i)<=n;i++)
for(int j=1;j<=n-(1<<i)+1;j++)
{ rm[i][j]=min(rm[i-1][j],rm[i-1][j+l]);
l=1<<(i-1);
}
}
void query(int q,int w)
{ int d=w-q+1;
int t=int(log2(d));
int p=int(pow(2,t));
printf("%d\n",min(rm[t][q],rm[t][w-p+1]));
}
int main()
{ freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
{ scanf("%d",&a[i]);
rm[0][i]=a[i];
}
constr();
for(i=1;i<=m;i++)
{ int x,y;
scanf("%d%d",&x,&y);
query(x,y);
}
return 0;
}