Pagini recente » Istoria paginii utilizator/cleosenpai | Monitorul de evaluare | Profil mates97 | Statistici Radu Iulian (Iulian2234) | Cod sursa (job #2180640)
#include<stdio.h>
int main()
{ char input[] = "rmq.in";
char output[] = "rmq.out";
FILE *f=fopen(input,"rt");
FILE *g=fopen(output,"wt");
long n,M[10000][100],i,j,v[10000],m,p[10000],k,l,r,len;
p[1]=0;
fscanf(f,"%ld",&n);
fscanf(f,"%ld",&m);
for (j=1; j<=n; j++){fscanf(f,"%ld",&v[i]); //j=0
M[0][j]=v[i];
i=j+1;
if(i>=(1<<(p[i-1]+1)))p[i]=p[i-1]+1;
else p[i]=p[i-1];
}
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,"%ld %ld",&l,&r);
len=r-l+1;
i=p[len];
if(M[i][r-(1<<i)+1]>M[i][l])
fprintf(g,"%ld\n", M[i][l]);
else fprintf(g,"%ld\n",M[i][r-(1<<i)+1]);
}
fclose(f);
fclose(g);
return 0;
}