Pagini recente » Cod sursa (job #2325677) | Cod sursa (job #870203) | Cod sursa (job #3142977) | Cod sursa (job #2817415) | Cod sursa (job #1197711)
#include <cstdio>
FILE*f=fopen("rmq.in","r");
FILE*h=fopen("rmq.out","w");
int lg[100001],r[18][100001],v[100001];
inline int min(int a,int b){
if ( a<b )return a;
return b;
}
int main(){
int n,m,k=0;
fscanf(f,"%d%d",&n,&m);
for ( int i=1;i<=n;++i ){
fscanf(f,"%d",&v[i]);
if ( (2<<k)<=i )
++k;
lg[i]=k;
r[0][i]=v[i];
for ( int j=1;j<=lg[i];++j )
r[j][i]=min(r[j-1][i],r[j-1][i-(1<<(j-1))]);
}
for ( int i=1;i<=m;++i ){
int x,y;
fscanf(f,"%d%d",&x,&y);
int L=lg[y-x+1];
fprintf(h,"%d\n",min(r[L][y],r[L][x+(1<<L)-1]));
}
return 0;
}