Pagini recente » Cod sursa (job #2340206) | Cod sursa (job #738200) | Cod sursa (job #183196) | Cod sursa (job #2375636) | Cod sursa (job #563802)
Cod sursa(job #563802)
# include <stdio.h>
using namespace std;
int a[100005][20],lg[100005],x,y,d,q,n,m,i,j,k,w;
int main ()
{
freopen ("rmq.in","r",stdin);
freopen ("rmq.out","w",stdout);
scanf ("%i%i",&n,&m);
for (i=1;i<=n;i++)
scanf ("%i",&a[i][0]);
for (i=2;i<=n;i++)
lg[i]=lg[i/2]+1;
for (j=1;j<=lg[n];j++)
{
w=1<<j-1;
for (i=1;(k=i+w)<=n;i++)
{
if (a[i][j-1]<a[k][j-1])
a[i][j]=a[i][j-1];
else
a[i][j]=a[k][j-1];
}
}
for (i=1;i<=m;i++)
{
scanf ("%i%i",&x,&y);
d=y-x+1;
q=lg[d];
k=(y-(1<<q))+1;
if (a[x][q]<a[k][q])
printf ("%i\n",a[x][q]);
else
printf ("%i\n",a[k][q]);
}
return 0;
}