Pagini recente » Cod sursa (job #2110738) | Cod sursa (job #2829931) | Cod sursa (job #1489529) | Cod sursa (job #373469) | Cod sursa (job #566792)
Cod sursa(job #566792)
#include <cstdio>
#define infile "rmq.in"
#define outfile "rmq.out"
#define MaxN 100005
#define LogMaxN 20
int rmq[MaxN][LogMaxN],lg[MaxN];
int N,M,k,i,j;
int main()
{
freopen(infile,"r",stdin);
freopen(outfile,"w",stdout);
scanf("%d%d",&N,&M);
for(i=0;i<N;i++)
scanf("%d",&rmq[i][0]);
for(i=2;i<=N;i++)
lg[i]=lg[i/2]+1;
for(j=1; (1<<j)<=N; j++)
for(i=0; i+(1<<j)<=N;i++)
if(rmq[i][j-1]<=rmq[i+(1<<(j-1))][j-1])
rmq[i][j]=rmq[i][j-1];
else
rmq[i][j]=rmq[i+(1<<(j-1))][j-1];
for(;M;M--)
{
scanf("%d%d",&i,&j);
k=lg[j-i+1];
if(rmq[i][k]<=rmq[j-(1<<k)][k])
printf("%d\n",rmq[i][k]);
else
printf("%d\n",rmq[j-(1<<k)][k]);
}
fclose(stdin);
fclose(stdout);
return 0;
}