Pagini recente » Cod sursa (job #96513) | Cod sursa (job #3039771) | Cod sursa (job #3260861) | Cod sursa (job #1490851) | Cod sursa (job #651377)
Cod sursa(job #651377)
#include<stdio.h>
long n,m,i,A[17][100001],ll[100001],l,t,j,x,y,m1,m2;
int main()
{ FILE *fin,*fout;
fin=fopen("rmq.in","r");
fout=fopen("rmq.out","w");
fscanf(fin,"%ld%ld",&n,&m);
for(i=1;i<=n;i++) fscanf(fin,"%ld",&a[0][i]);
l=2;
while(l<=n)
{ j++; ll[l]=1;
for(i=1;i<=n-l+1;i++) A[j][i]=(A[j-1][i]<A[j-1][i+(l>>1)])?A[j-1][i]:A[j-1][i+(l>>1)];
l<<=1;
}
for(i=1;i<=n;i++) ll[i]+=ll[i-1];
for(t=1;t<=m;t++)
{ fscanf(fin,"%ld%ld",&x,&y);
i=ll[y-x+1]; l=1<<i;
m1=A[i][x]; m2=A[i][y-l+1];
if(m1>m2)
m1=m2;
fprintf(fout,"%ld\n",m1);
}
fclose(fin);
fclose(fout);
return 0;
}