Cod sursa(job #606569)

Utilizator elfusFlorin Chirica elfus Data 4 august 2011 19:55:51
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include<cstdio>
#define min(x,y) (x < y ? x : y)

using namespace std;

int D[18][100100];

inline int log2(int X)
{
    int pow=0;
    while ((1<<pow) <= X)
        pow++;
    return pow - 1;
}

int main()
{
    int N,M,x,y,val,i,j;

    freopen("rmq.in","r",stdin);
    freopen("rmq.out","w",stdout);

    scanf("%d%d",&N,&M);
    for(i=1;i<=N;i++)
        scanf("%d",&D[0][i]);

    for(i=1;i<=log2(N);i++)
        for(j=1;j<=N;j++)
            {
                if(j + (1<<i) > N+1)
                    break;
                D[i][j] = min(D[i-1][j] , D[i-1][j+(1<<(i-1))]);
            }

    for(i=1;i<=M;i++)
    {
        scanf("%d%d",&x,&y);
        val = log2(y-x+1);
        printf("%d\n", min (D[val][x] , D[val][y-(1<<val)+1]));
    }
    return 0;
}