Cod sursa(job #2576644)

Utilizator trap2020Jonathan Trap trap2020 Data 6 martie 2020 21:21:35
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.76 kb
#include <bits/stdc++.h>
#define DAU  std::ios::sync_with_stdio(false); fin.tie(0); fout.tie(0);
#define PLEC fin.close(); fout.close(); return 0;
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int rmq[20][100005], n, q, x, y, dif, l;
int main()
{
    DAU
    fin >> n >> q;
    for (int i = 1; i <= n; ++i)
        fin >> rmq[0][i];
    for (int p = 0; (1 << p) < n; ++p)
        for (int i = 1; i + (1 << p) <= n; ++i)
            rmq[p + 1][i] = min(rmq[p][i], rmq[p][i + (1 << p)]);
    for (int i = 1; i <= q; ++i)
    {
        fin >> x >> y;
        if (x > y)
            swap(x, y);
        dif = y - x + 1;
        l = log2(dif);
        fout << min(rmq[l][x], rmq[l][x + dif - (1 << l)]) << '\n';
    }
    PLEC
}