Cod sursa(job #1801271)

Utilizator CodrutLemeniCodrut Lemeni CodrutLemeni Data 8 noiembrie 2016 20:27:40
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#define N 100010
#define LOGN 17


using namespace std;


int rmq[N][LOGN];
int log[N];

int main(){
    int n,m,i,pow2;
    int j;
    int x,y;

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

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

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

    for(i=2 ; i<=n ; i++){
        log[i] = log [ i>>1] + 1;
    }

    for(pow2 = 1 , j = 1; 2 * pow2 <= n ; pow2<<=1 , j++ ){

        for( i=1 ; i + pow2 <=n ;i++ ){

            rmq[i][j] = min ( rmq[i][j-1], rmq[ i + pow2 ][ j-1 ] );

        }

    }



    for(i=0; i < m ; i++){
        scanf("%d%d",&x,&y);
        int lg = log[ y-x+1 ];
        printf("%d\n", min( rmq[ x ] [ lg ] , rmq[ y - (1<<lg) + 1 ][ lg ] ) );


    }


    return 0;
}