Cod sursa(job #2901865)

Utilizator RaduAntoneoAntonio Alexandru Radu RaduAntoneo Data 14 mai 2022 17:21:45
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.73 kb
#include <bits/stdc++.h>
using namespace std;

ifstream f("rmq.in");
ofstream g("rmq.out");
#define cin f
#define cout g

int n, idx, x, y, i, j, arr[100001], rmq[16][100001];
//rmq[i][j] = min(arr[j], arr[j+1], ..., arr[j+2^i-1])

int main() {
    int n, m;
    cin >> n >> m;
    for(i = 1; i <= n; i++)
        cin >> arr[i];

    for(i = 1; i <= n; i++)
        rmq[0][i] = arr[i];

    for(i = 1; (1 << i) <= n; i++)
        for(j = 1; j <= n - (1 << i) + 1; j++)
            rmq[i][j] = min(rmq[i - 1][j], rmq[i - 1][j + (1 << (i - 1))]);
    
    for(i = 1; i <= m; i++) {
        cin >> x >> y;
        idx = floor(log2(y - x + 1));
        cout << min(rmq[idx][x], rmq[idx][y - (1 << idx) + 1]) << '\n';
    }
}