Pagini recente » Cod sursa (job #3196588) | Cod sursa (job #1852829) | Cod sursa (job #2799643) | Cod sursa (job #1057159) | Cod sursa (job #1253679)
#include<cstdio>
using namespace std;
int n,m,x,y,p,p1,q,i,j,a[20][100004];
int main ()
{
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
scanf("%d %d",&n,&m);
scanf("%d",&y);
p=1;
a[0][1]=y;
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;
if(i==11)
i=11;
for(j=1;j<=n-p1*2+1;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;
}