Pagini recente » Cod sursa (job #1621005) | Cod sursa (job #1427936) | Cod sursa (job #378804) | Cod sursa (job #2461133) | Cod sursa (job #2027354)
#include <iostream>
#include <cstdio>
using namespace std;
int r[18][100001],log[100001];
int main()
{freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
int i,j,m,n,p,a,b,dif,sh;
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
scanf("%d",&r[0][i]);
for(i=2;i<=n;i++)log[i]=log[i/2]+1;
for(i=1;(1<<i)<=n;i++)
{p=1<<(i-1);
for(j=0;j<(n-(1<<i)+1);j++)
{
if(r[i-1][j]<r[i-1][j+p])r[i][j]=r[i-1][j];
else r[i][j]=r[i-1][j+p];
}
}
p=i;
/*
for(i=0;i<p;i++)
{
for(j=0;j<n;j++)printf("%d ",r[i][j]);
printf("\n");
}*/
for(i=0;i<m;i++)
{
scanf("%d%d",&a,&b);
dif=b-a+1;
p=log[dif];
sh=dif-(1<<(p));
if(r[p][a]<r[p][a+sh])printf("%d\n",r[p][a]);
else printf("%d\n",r[p][a+sh]);
}
return 0;
}