Cod sursa(job #2681267)

Utilizator andrei_C1Andrei Chertes andrei_C1 Data 5 decembrie 2020 10:59:59
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.77 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int N, M;
vector<int>lg;
vector<vector<int>>w;
int main() {
    fin >> N >> M;
    lg = vector<int>(N+5);
    w = vector<vector<int>>(21, vector<int>(N+5));
    for(int i = 1; i <= N; i++) {
        fin >> w[0][i];
    }
    lg[1] = 0;
    for(int i = 2; i <= N; i++) {
        lg[i] = lg[i >> 1] + 1;
    }
    for(int i = 1; (1 << i) <= N; i++) {
        for(int j = 1; j + (1 << i) - 1 <= N; j++) {
            w[i][j] = min(w[i - 1][j], w[i - 1][j + (1 << (i-1))]);
        }
    }
    for(int x, y; M--; ) {
        fin >> x >> y;
        int len = lg[y - x +1];
        fout << min(w[len][x], w[len][y - (1 << len) + 1]) << '\n';
    }
    return 0;
}