Pagini recente » Cod sursa (job #234037) | Cod sursa (job #1778071) | Diferente pentru home intre reviziile 629 si 630 | Cod sursa (job #2703460) | Cod sursa (job #1679614)
#include <stdio.h>
#define nmax 1000005
#define logn 17
int r[nmax][logn],log[nmax];
int min(int a,int b){
if(a<b)
return a;
return b;
}
int main(){
FILE *fin,*fout;
fin=fopen("rmq.in","r");
fout=fopen("rmq.out","w");
int i,j,n,m,l,rasp,a,b;
fscanf(fin,"%d%d",&n,&m);
for(i=2;i<=nmax;i++)
log[i]=1+log[i/2];
for(i=1;i<=n;i++){
fscanf(fin,"%d",&r[i][0]);
for(j=1;(1<<j)<=i;j++)
r[i][j]=min(r[i][j-1],r[i-(1<<(j-1))][j-1]);
}
for(i=1;i<=m;i++){
fscanf(fin,"%d%d",&a,&b);
l=log[b-a+1];
rasp=min(r[b][l],r[a+(1<<l)-1][l]);
fprintf(fout,"%d\n",rasp);
}
fclose(fin);
fclose(fout);
return 0;
}