Pagini recente » Cod sursa (job #33902) | Cod sursa (job #1320399) | Cod sursa (job #2400330) | Cod sursa (job #1085069) | Cod sursa (job #1665508)
#include <stdio.h>
using namespace std;
#define logmax 20
int log[100005];
int r[logmax][100005];
int main()
{
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
int n,m,i,j,k,l,a,b,*pointr;
int logn;
scanf("%d%d",&n,&m);
pointr=&(r[0][0]);
for(i=1;i<=n;i++)
{
scanf("%d",pointr+i);
}
log[1]=0;
for(i=2;i<=n;i++)
log[i]=log[i>>1]+1;
logn=log[n];
for(i=1;i<=n;i++)
{
for(j=1;i>=(1<<j);j++)
{
k=i-(1<<(j-1));
r[j][i] = r[j-1][i]<=r[j-1][k] ? r[j-1][i] : r[j-1][k];
}
}
for(i=1;i<=m;i++)
{
scanf("%d%d",&a,&b);
l=log[b-a+1];
printf("%d\n",(r[l][b]<=r[l][a+(1<<l)-1] ? r[l][b] : r[l][a+(1<<l)-1]));
}
return 0;
}