Pagini recente » Cod sursa (job #1413255) | Cod sursa (job #2180637) | Cod sursa (job #904444) | Cod sursa (job #2277432) | Cod sursa (job #2181690)
#include <stdio.h>
#include <stdlib.h>
int main()
{ char input[]="grader_test3.in";
char output[]="rmq.out";
FILE *f=fopen(input,"rt");
FILE *g=fopen(output,"wt");
int n,M[17][5005],i,j,m,p[5005],k,l,r,len,expo;
p[1]=0; //2^i<=p[i]
expo=1;
fscanf(f,"%d",&n);
fscanf(f,"%d",&m);
for(j=1;j<=n;j++)
{fscanf(f,"%d",&M[0][j]);
{if(2*expo<=j+1){p[j+1]=p[j]+1;expo=expo*2;}
else p[j+1]=p[j];
}
}
for(i=1;(1<<i)<=n;i++)
{
for(j=1;j<=n-(1<<i)+1;j++)
{
{if(M[i-1][j]<M[i-1][j+(1<<(i-1))])
M[i][j]=M[i-1][j];
else M[i][j]=M[i-1][j+(1<<(i-1))];}
}
}
for ( k=1; k<=m;k++)
{ fscanf(f,"%d %d",&l,&r);
len=r-l+1;
i=p[len];
if(M[i][r-(1<<i)+1]>M[i][l])
fprintf(g,"%d\n", M[i][l]);
else fprintf(g,"%d\n",M[i][r-(1<<i)+1]);
}
fclose(f);
fclose(g);
return 0;
}