Pagini recente » Cod sursa (job #2184109) | Cod sursa (job #2803241) | Cod sursa (job #522299) | Cod sursa (job #2815519) | Cod sursa (job #1665507)
#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]));
}
printf("\n\n");
for(j=0;j<=logn;j++)
{
for(i=0;i<=n;i++)
printf("%4d ",r[j][i]);
printf("\n");
}
return 0;
}