Pagini recente » Cod sursa (job #3186265) | Cod sursa (job #1165868) | Cod sursa (job #2942161) | Cod sursa (job #494831) | Cod sursa (job #385466)
Cod sursa(job #385466)
#include<stdio.h>
int k,lg[100002],rmq[18][100002],i,j,n,m,x,y,dif,misc;
int min(int x,int y){
if(x<y)
return x;
else
return y;
}
int main(){
FILE*f=fopen("rmq.in","r");
FILE*g=fopen("rmq.out","w");
fscanf(f,"%d %d",&n,&m);
for(i=1;i<=n;i++)
fscanf(f,"%d",&rmq[0][i]);
for(i=2;i<=n;i++)
lg[i]=lg[i/2]+1;
for(i=1;(1<<i)<=n;i++){
k=1<<(i-1);
for(j=1;j+(1<<i)-1<=n;j++)
rmq[i][j]=min(rmq[i-1][j],rmq[i-1][j+k]);
}
for(i=1;i<=m;i++){
fscanf(f,"%d %d",&x,&y);
dif=y-x+1;
k=lg[dif];
misc=dif-(1<<k);
fprintf(g,"%d\n",min(rmq[k][x],rmq[k][x+misc]));
}
fclose(f);
fclose(g);
return 0;
}