Pagini recente » Cod sursa (job #1076514) | Cod sursa (job #472969) | Cod sursa (job #1738141) | Cod sursa (job #898068) | Cod sursa (job #430076)
Cod sursa(job #430076)
#include<stdio.h>
FILE *f,*g;
int i,put[30],n,a[100500],m[100500][25],ok,j,p,x,y,min,k,log[100500],o;
int main()
{ f=fopen("rmq.in","r"); g=fopen("rmq.out","w");
fscanf(f,"%d%d",&n,&p);
log[1]=0; for(i=2;i<=n;i++) log[i]=log[i/2]+1;
for(i=1;i<=n;i++) fscanf(f,"%d",&m[i][0]);
for(j=1; (1<<j)<=n; j++) for(i=1; i+(1<<j)<=n+1; i++)
if(m[i][j-1]<=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(i=1;i<=p;i++)
{ fscanf(f,"%d%d",&x,&y);
k=log[y-x+1];
if(m[x][k]<=m[y+1-(1<<k)][k]) fprintf(g,"%d\n",m[x][k]);
else fprintf(g,"%d\n",m[y+1-(1<<k)][k]);
}
fclose(g);
return 0;
}