Cod sursa(job #2678653)

Utilizator tifui.alexandruTifui Ioan Alexandru tifui.alexandru Data 28 noiembrie 2020 14:49:22
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.67 kb
#include <bits/stdc++.h>

using namespace std;

int main() {
    ifstream cin("rmq.in");
    ofstream cout("rmq.out");
    int n, m;
    cin >> n >> m;
    
    vector < vector <int> > rmq(20);
    rmq[0].resize(n);
    for (int i = 0; i < n; ++i) 
        cin >> rmq[0][i];

    for (int i = 1; (1 << i) < n; ++i) {
        rmq[i].resize(n);
        for (int j = 0; j + (1 << (i - 1)) < n; ++j) 
            rmq[i][j] = min(rmq[i - 1][j], rmq[i - 1][j + (1 << (i - 1))] - rmq[i][j]);
    }
    
    while (m--) {
        int x, y; cin >> x >> y; --x; --y;

        int len = log2(y - x + 1);

        cout << min(rmq[len][x], rmq[len][y - (1 << len) + 1]) << '\n';
    }

    return 0;
}