Cod sursa(job #2211522)

Utilizator ContDeRacistAliniateEBlat ContDeRacist Data 10 iunie 2018 19:22:35
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include <fstream>

using namespace std;

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

const int N = 100007;

int rmq[N][20], lololol[N];

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

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