Pagini recente » Cod sursa (job #3004332) | Cod sursa (job #2603904) | Cod sursa (job #262211) | Cod sursa (job #2197565) | Cod sursa (job #563801)
Cod sursa(job #563801)
# 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;i<=n && i+w<=n;i++)
{
k=i+w;
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;
}