Cod sursa(job #1775475)

Utilizator andy1207Cioltan Andrei andy1207 Data 10 octombrie 2016 14:36:07
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.69 kb
#include<cstdio>
int r[100001][17];
int log[100001];
int main()
{
 int n,m,i,j,a,b,q,l;
 freopen("rmq.in","r",stdin);
 freopen("rmq.out","w",stdout);
 scanf("%d%d",&n,&m);
 for(i=1;i<=n;i++)
    {
     scanf("%d",&r[i][0]);
    }
 for(i=1;i<=n;i++)
    {
     for(j=1;(1<<j)<=i;j++)
        {
         if(r[i][j-1]<r[i-(1<<(j-1))][j-1])
            r[i][j]=r[i][j-1];
         else
            r[i][j]=r[i-(1<<(j-1))][j-1];
        }
    }
 log[1]=0;
 for(i=2;i<=n;i++)
    {
     log[i]=1+log[i/2];
    }
 for(i=1;i<=m;i++)
    {
     scanf("%d%d",&a,&b);
     l=log[b-a+1];
     if(r[b][l]<r[a+(1<<l)-1][l])
        q=r[b][l];
     else
        q=r[a+(1<<l)-1][l];
     printf("%d\n",q);
    }
return 0;
}