Cod sursa(job #2284826)

Utilizator papinub2Papa Valentin papinub2 Data 17 noiembrie 2018 17:10:54
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.81 kb
#include <fstream>
#include <vector>
#include <algorithm>

using namespace std;

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

int main()
{
    int n, T;
    in >> n >> T;

    vector<int> v(n + 1);
    vector<int> logaritm(n + 1);

    for (int i = 2; i <= n; i++)
        logaritm[i] = logaritm[i / 2] + 1;

    vector<vector<int> > rmq(logaritm[n] + 1, vector<int>(n + 1));

    for (int i = 1; i <= n; i++)
        in >> v[i], rmq[0][i] = v[i];

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

    while (T--)
    {
        int x, y;
        in >> x >> y;

        int dif = logaritm[y - x + 1];
        out << min(rmq[dif][x], rmq[dif][y - (1<<dif) + 1]) << '\n';
    }

    return 0;
}