Cod sursa(job #2544936)

Utilizator KPP17Popescu Paul KPP17 Data 12 februarie 2020 18:08:47
Problema Range minimum query Scor 30
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.11 kb
using namespace std;


#define fisier "rmq"

#ifdef fisier
    #include <fstream>
    ifstream in(fisier ".in");
    ofstream out(fisier ".out");
#else
    #include <iostream>
    #define in cin
    #define out cout
#endif

#include <algorithm>



int v[100000], n;



int secv_min(int st, int dr) {

    if (st == dr)
        return v[st]; // v[dr];

    if (st == dr - 1)
        return min(v[st], v[dr]);

    int m = (st + dr) / 2;
    return min(secv_min(st, m), secv_min(m + 1, dr));

    /**

         N | APELURI DE MIN
        --------------------
         1 | 0
         2 | 1
         3 | 2
         4 | 3
         5 | 4
         6 | 5
         n | n - 1



         abcdefhg         (1)
         abcd efhg |      (2)
         ab cd | ef hg |  (4)

         O( sigma(k = 0, log2(n))(2^k) )


    **/

}



int main() {

    int m, x, y;

    in >> n >> m;

    for (int i = 0; i < n; i++) {

        in >> v[i];

    }

    while (m--) {

        in >> x >> y;

        out << secv_min(x-1, y-1) << '\n';

    }

}













//