Cod sursa(job #331847)

Utilizator IoannaPandele Ioana Ioanna Data 15 iulie 2009 14:39:07
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.72 kb
#include<stdio.h>
#include<math.h>
#define nmax 100010
long a[20][nmax],n,m;

void read()
{
scanf("%ld%ld",&n,&m);
long i;
for (i=1;i<=n;i++)
     scanf("%ld",&a[0][i]);
}

long min(long a,long b)
{
if (a<b)
    return a;
return b;
}

void pre()
{
long i,lim,j;
lim=log2(n);
for (i=1;i<=lim;i++)
    {
     for (j=1;j+(1<<i)-1<=n;j++)
          a[i][j]=min(a[i-1][j],a[i-1][j+(1<<(i-1))]);
    }
}

void rez()
{
long i,x,y,k,r;
for (i=1;i<=m;i++)
    {
     scanf("%ld%ld",&x,&y);
     k=log2(y-x+1);
     r=min(a[k][x],a[k][y+1-(1<<k)]);
     printf("%ld\n",r);
    }
}

int main()
{
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
read();
pre();
rez();
return 0;
}