Cod sursa(job #2901747)

Utilizator florinrafiliuRafiliu Florin florinrafiliu Data 14 mai 2022 12:49:46
Problema Range minimum query Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.97 kb
#include <bits/stdc++.h>

#define int long long

using namespace std;

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

const int maxN = 1e5 + 5;

int suma[maxN], lg[32];
int rmq[32][maxN];

signed main() {

    int n; fin >> n;

    for(int i = 1; i <= n; ++i) {
//        int l, h; cin >> l >> h;
//
//        suma[i] = suma[i-1] + l;
//        rmq[0][i] = h;
        fin >> rmq[0][i];
    }

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

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

    int q; fin >> q;

    for(int i = 1; i <= q; ++i) {
        int x, y; fin >> x >> y;

        int l = lg[y-x+1];

        fout << min(rmq[l][x],
                    rmq[l][y - (1 << l) + 1]) /* (suma[y] - suma[x-1])*/ << '\n';
    }

    return 0;
}