Cod sursa(job #235725)

Utilizator crawlerPuni Andrei Paul crawler Data 25 decembrie 2008 15:43:51
Problema Range minimum query Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
#include <stdio.h>

#define Nmax 100100

int t[Nmax][17],n,m;

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

int main()
{
    freopen("rmq.in","r",stdin);
    freopen("rmq.out","w",stdout);
    
    scanf("%d%d",&n,&m);
    
    for (int i=1;i<=n;++i)
    scanf("%d", &t[i][0]);
    
    for (int j=1;(1<<j)<=n;++j)
    for (int i=1;i<=n;++i) if (i+(1<<(j-1))<=n) t[i][j] = min(t[i][j-1],t[i+(1<<(j-1))][j-1]);
    
    int x,y;
    
    for (int i=1;i<=m;++i)
    {
        scanf("%d%d",&x,&y);                    
        int ret=123456789;   
        for (int k=16;k>=0;--k) if(x+(1<<k)-1<=y)
        {
            ret = min(ret,t[x][k]);
            x += (1<<k);    
        }
        printf("%d\n", ret);        
    }


    
    return 0;
}