Pagini recente » Cod sursa (job #447450) | Cod sursa (job #1293690) | Cod sursa (job #1365585) | Cod sursa (job #2831090) | Cod sursa (job #1253676)
#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);
if(x==0)printf("linia %d",i+1);
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])printf("%d\n",a[q][x]);
else printf("%d\n",a[q][y-p]);
}
return 0;
}