Pagini recente » Cod sursa (job #3156412) | Cod sursa (job #1143020) | Cod sursa (job #690354) | Cod sursa (job #1733628) | Cod sursa (job #207193)
Cod sursa(job #207193)
#include<stdio.h>
FILE *fin=fopen("rmq.in","r"),
*fout=fopen("rmq.out","w");
int N,K,M[20][100005];
int log[100005];
int main(){
fscanf(fin,"%d %d",&N,&K);
log[0]=-1;
for(int i=1;i<=N;i++){
fscanf(fin,"%d",&M[0][i]);
log[i]=log[i/2]+1;
}
for(int j=1;1<<j <=N;j++)
for(int i=1;i+(1<<j)-1<=N;i++)
if(M[j-1][i]<=M[j-1][i+(1<<(j-1))])
M[j][i]=M[j-1][i];
else
M[j][i]=M[j-1][i+(1<<(j-1))];
int i,j,l,nr1,nr2;
for(int k=1;k<=K;k++){
fscanf(fin,"%d %d",&i,&j);
l=log[j-i+1];
nr1=M[l][i];
nr2=M[l][j-(1<<l)+1];
if(nr1<=nr2)
fprintf(fout,"%d\n",nr1);
else
fprintf(fout,"%d\n",nr2);
}
fclose(fin);
fclose(fout);
return 0;
}