Pagini recente » Cod sursa (job #1202915) | Cod sursa (job #1789254) | Cod sursa (job #2822561) | Cod sursa (job #2553070) | Cod sursa (job #1213453)
#include<cstdio>
int n,m,i,j,x[20][100100],a,b,q,d,p[100010];
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");
p[1]=0;
for(i=1;i<=100000;i++){
p[i]=p[i/2]+1;
}
fscanf(f,"%d%d",&n,&m);
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;
}