Cod sursa(job #2270307)

Utilizator CryshanaGanea Carina Cryshana Data 27 octombrie 2018 10:28:06
Problema Range minimum query Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.75 kb
#include <iostream>
#include <fstream>

using namespace std;

const int N = 100001, L = 18;

int r[L][N], log[L];

ifstream fin  ("rmq.in" );
ofstream fout ("rmq.out");


int main()

{
    int n, m;
    fin >> n >> m;
    for ( int i = 2; i <= n; i++ )
    {
        log[i] = log[i/2] + 1;
    }
    for ( int i = 1; i <= n; i++ )
    {
        fin >> r[0][i] ;
    }
    for ( int i = 1; i <= log[n]; i++ )
    {
        for ( int j = 1 << i ; j <= n; j++ )
        {
            r[i][j] = min ( r[i-1][j - ( 1 << (i-1) ) ], r[i-1][j] );
        }
    }
    while ( m != 0 )
    {
        m--;
        int x, y;
        fin >> x >> y;
        int l = log[y-x+1];
        int rez = min ( r[l][x+(1<<l)-1], r[l][y] );
        fout << rez << "\n";
    }
    return 0;

}