Pagini recente » Cod sursa (job #1616833) | Cod sursa (job #1655635) | Cod sursa (job #1628561) | Cod sursa (job #1892803) | Cod sursa (job #213822)
Cod sursa(job #213822)
#include<stdio.h>
long n,m,i,a[100100],p2[100100],x[20][100100],a1,a2,p,l,q;
int main()
{
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
scanf("%ld%ld",&n,&m);
for(i=1;i<=n;++i){
scanf("%ld",&a[i]);
if(p2[i]>1)p2[i]=p2[i/2]+1;
x[0][i]=a[i];}
for(i=1;(1<<i)<=n;++i)
for(p=1;p<=n+1-(1<<i);++p)
{l=1<<(i-1);
if(x[i-1][p]<x[i-1][p+l])x[i][p]=x[i-1][p];
else x[i][p]=x[i-1][p+l];
}
for(i=1;i<=m;++i)
{scanf("%ld%ld",&a1,&a2);
p=a2-a1+1;
q=p-(1<<p2[p]);
if(x[p2[p]][a1]<x[p2[p]][a1+q])printf("%ld\n",x[p2[p]][a1]);
else printf("%ld\n",x[p2[p]][a1+q]);}
return 0;
}