Pagini recente » Cod sursa (job #1028590) | Cod sursa (job #454267) | Cod sursa (job #1971099) | Cod sursa (job #1971323) | Cod sursa (job #2180627)
#include<stdio.h>
int main()
{ long n,M[100000][100],i,j,v[100000],m,p[100000],k,l,r,len;
p[1]=0;
scanf("%ld",&n);
scanf("%ld",&m);
for (j=1; j<=n; j++){scanf("%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++)
{ scanf("%ld %ld",&l,&r);
len=r-l+1;
i=p[len];
if(M[i][r-(1<<i)+1]>M[i][l])
printf("%ld\n", M[i][l]);
else printf("%ld\n",M[i][r-(1<<i)+1]);
}
return 0;
}