Pagini recente » Cod sursa (job #811082) | Cod sursa (job #1724417) | Cod sursa (job #325042) | Cod sursa (job #660699) | Cod sursa (job #1253606)
#include<cstdio>
using namespace std;
int n,m,x,y,p,p1,q,i,j,a[20][100002];
int main ()
{
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
scanf("%d %d",&n,&m);
scanf("%d",&y);
p=1;
while(p*2<n)
{
p=p*2;
q++;
}
for(i=2;i<=n;i++)
{
scanf("%d",&x);
if(x<y)a[1][i-1]=x;
else a[1][i-1]=y;
y=x;
}
p1=1;
for(i=2;i<=q;i++)
{
p/=2;
p1*=2;
for(j=1;j<=p;j++)
{
if(a[i-1][j]<a[i-1][j+p1+1])a[i][j]=a[i-1][j];
else a[i][j]=a[i-1][j+p1+1];
}
}
for(i=1;i<=m;i++)
{
scanf("%d %d",&x,&y);
p=1;
q=0;
n=y-x+1;
while(p*2<=n)
{
p=p*2;
q++;
}
if(a[q][x]<a[q][y-p+1])printf("%d\n",a[q][x]);
else printf("%d\n",a[q][y-p+1]);
}
return 0;
}