Pagini recente » Cod sursa (job #2925658) | Cod sursa (job #2649592) | Cod sursa (job #2303160) | Cod sursa (job #2139149) | Cod sursa (job #1487452)
#include<cstdio>
int n,m,i,j,a,b,q,d,p[100100],x[20][100100];
FILE *f,*g;
int minim(int a,int b){
if(a<b)
return a;
return b;
}
int main(){
f=fopen("rmq.in","r");
g=fopen("rmq.out","w");
fscanf(f,"%d%d",&n,&m);
for(i=2;i<=100000;i++){
p[i]=p[i/2]+1;
}
for(i=1;i<=n;i++){
fscanf(f,"%d",&x[0][i]);
}
for(i=1;i<=p[n];i++){
a=1<<(i-1);
for(j=1;j<=n;j++){
if(j+a<=n)
x[i][j]=minim( x[i-1][j], x[i-1][j+a] );
else
x[i][j]=x[i-1][j];
}
}
for(i=1;i<=m;i++){
fscanf(f,"%d%d",&a,&b);
q=b-a+1;
d=1<<(p[q]-1);
fprintf(g,"%d\n",minim( x[ p[q] - 1 ][a], x[ p[q] - 1 ][ b-d+1 ] ) );
}
fclose(f);
fclose(g);
return 0;
}