Cod sursa(job #2211515)

Utilizator ContDeRacistAliniateEBlat ContDeRacist Data 10 iunie 2018 18:52:11
Problema Range minimum query Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.13 kb
#include <fstream>

using namespace std;

ifstream cin("custi.in");
ofstream cout("custi.out");

const long long N = 100007;

long long v[N], rmq[N][20], lololol[N];

long long op(long long val1, long long val2) {
    return min(val1, val2);
}

int main()
{
    long long n, m;
    cin >> n >> m;
    for (long long i = 1; i <= n; ++i) {
        cin >> v[i];
    }
    for (long long i = 1; i <= n; ++i) {
        rmq[i][0] = v[i];
    }
    long long pas = 2, lol(1);
    while (pas < n) {
        for (long long i = 1; i <= n - pas + 1; ++i) {
            long long alpha = pas>>1;
            rmq[i][lol] = op(rmq[i + alpha][lol - 1], rmq[i][lol - 1]);
        }
        ++lol;
        pas<<=1;
    }
    pas = 1;
    lol = 0;
    while (pas <= n) {
        for (long long i = pas; i < (pas<<1); ++i) {
            lololol[i] = lol;
        }
        ++lol;
        pas <<= 1;
    }
    long long x, y;
    for (long long i = 0; i < m; ++i) {
        cin >> x >> y;
        long long log = lololol[y - x + 1];
        cout << min(rmq[x][log], rmq[y - (1<<log) + 1][log]) << "\n";
    }
    return 0;
}