Cod sursa(job #1762335)

Utilizator isav_costinVlad Costin Andrei isav_costin Data 23 septembrie 2016 14:32:07
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.72 kb
#include <cstdio>

int r[100001][20];
int rez[100001][20];
int logx[100001];

using namespace std;

int min( int a, int b )
{
    if( b<a )
        a=b;

    return a;
}

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

    int n, m, x, y, i, j, l, rez;

    scanf( "%d%d", &n, &m );

    for( i=1;i<=n;i++ )
    {
        scanf( "%d", &r[i][0] );

        for( j=1;(1<<j)<=i;j++ )
            r[i][j]=min(r[i][j-1],r[i-(1<<(j-1))][j-1]);
    }

    logx[1]=0;

    for( i=2;i<=n;i++ )
        logx[i]=1+logx[i/2];

    for( i=1;i<=m;i++ )
    {
        scanf( "%d%d", &x, &y );

        l=logx[y-x+1];
        rez=min(r[y][l],r[x+(1<<l)-1][l]);

        printf( "%d\n", rez );
    }

    return 0;
}