Pagini recente » Cod sursa (job #353900) | Cod sursa (job #2058175) | Cod sursa (job #2139440) | Cod sursa (job #1854140) | Cod sursa (job #207186)
Cod sursa(job #207186)
#include<stdio.h>
FILE *fin=fopen("rmq.in","r"),
*fout=fopen("rmq.out","w");
int N,K,M[100005][20],a[100005];
int log[100005];
int main(){
fscanf(fin,"%d %d",&N,&K);
for(int i=1;i<=N;i++){
fscanf(fin,"%d",&a[i]);
M[i][0]=i;
}
log[1]=0;
for(int i=2;i<=N;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(a[M[i][j-1]]<=a[M[i+(1<<(j-1))][j-1]])
M[i][j]=M[i][j-1];
else
M[i][j]=M[i+(1<<(j-1))][j-1];
for(int k=1;k<=K;k++){
int i,j;
fscanf(fin,"%d %d",&i,&j);
int l=log[j-i+1];
if(a[M[i][l]]<a[M[j-(1<<l)+1][l]])
fprintf(fout,"%d\n",a[M[i][l]]);
else
fprintf(fout,"%d\n",a[M[j-(1<<l)+1][l]]);
}
fclose(fin);
fclose(fout);
return 0;
}