Cod sursa(job #1991537)

Utilizator MihaelaCismaruMihaela Cismaru MihaelaCismaru Data 17 iunie 2017 12:51:16
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.75 kb
#include<fstream>
using namespace std;
ifstream in("rmq.in");
ofstream out("rmq.out");
int n,m,k,i,p[20],minim,a[20][100001],x,y,aux[100001],h,alfa;
int main(){
    in >> n >> m;
    for( i = 1; i <= n; i ++ ){
        in >> a[0][i];
    }
    p[0] = 1;
    for( i = 1; i <= 18; i ++ ){
        p[i] = p[i-1]*2;
    }
    for( i = 2; i <= n; i ++ ){
        aux[i] = aux[i/2]+1;
    }
    for( k = 1; k <= 18; k ++ ){
        for( i = 1; i <= n -p[k] + 1; i ++ ){
            a[k][i] = min( a[k-1][i], a[k-1][i + p[k-1] ] );
        }
    }
    for( h = 1; h <= m; h ++ ){
        in >> x >> y;
        alfa =  aux[y-x+1];
        minim = min( a[alfa][x],a[alfa][y-p[aux[y-x+1]] + 1 ] );
        out << minim <<"\n";
    }
    return 0;
}