Pagini recente » Borderou de evaluare (job #17786) | Cod sursa (job #2026940)
#include <iostream>
#include <cstdio>
using namespace std;
int r[100001][17],log[100001];
int main()
{freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
int i,j,m,n,p,a,b;
scanf("%d%d",&n,&m);
for(i=0;i<n;i++)scanf("%d",&r[0][i]);
for(i=2;i<=n;i++)log[i]=log[i/2]+1;
for(i=1;i<n;i=i<<1)
{p=i/2+1;
for(j=0;j<n-i;j++)
{
if(r[i-1][j]<r[i-1][j+p])r[i][j]=r[i-1][j];
else r[i][j]=r[i-1][j+p];
}
}
for(i=0;i<m;i++)
{
scanf("%d%d",&a,&b);
p=log[b-a];
if(r[p][a-1]<r[p][b-p-1])printf("%d\n",r[p][a-1]);
else printf("%d\n",r[p][b-p-1]);
}
return 0;
}