Pagini recente » Cod sursa (job #594647) | Cod sursa (job #3222599) | Cod sursa (job #1909994) | Cod sursa (job #322662) | Cod sursa (job #1253654)
#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);
a[0][i]=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++)
{
p1*=2;
j=0;
while(a[0][j+p1]!=0)
{
j++;
if(a[i-1][j]<a[i-1][j+p1])a[i][j]=a[i-1][j];
else a[i][j]=a[i-1][j+p1];
}
}
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;
}