Cod sursa(job #1042812)

Utilizator Dddarius95Darius-Florentin Neatu Dddarius95 Data 27 noiembrie 2013 18:24:22
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
// Include
#include <fstream>
#include <algorithm>
using namespace std;

// Constante
const int sz = (int)1e5+1;
const int lgsz = 21;

// Variabile
ifstream in("rmq.in");
ofstream out("rmq.out");

int num, questions;
int lg[sz];
int rmq[lgsz][sz];

// Main
int main()
{
    in >> num >> questions;
    for(int i=1 ; i<=num ; ++i)
        in >> rmq[0][i];

    for(int i=2 ; i<=num ; ++i)
        lg[i] = lg[i/2] + 1;


    for(int i=1 ; (1<<i) <=num ; ++i)
        for(int j=1 ; j<=num-(1<<i)+1 ; ++j)
            rmq[i][j] = min(rmq[i-1][j], rmq[i-1][j+(1<<i-1)]);

    while(questions--)
    {
        int left, right;
        in >> left >> right;
        int dist = right - left+1;
        int log = lg[dist];
        int val = min(rmq[log][left], rmq[log][right-(1<<log)+1]);
        out << val << '\n';
    }


    in.close();
    out.close();
    return 0;
}