Cod sursa(job #3306362)

Utilizator petric_mariaPetric Maria petric_maria Data 9 august 2025 22:53:41
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.74 kb
#include <bits/stdc++.h>
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");

int n, m, x, st, dr, dp[25][100005];

int pwr (int x) {
    int p = 1;
    while ((1<<p) <= x)
        ++p;
    return p-1;
}

int main()
{
    f >> n >> m;
    for (int i=1; i<=n; ++i)
        f >> dp[0][i];

    for (int p=1; (1<<p)<=n; p++)
        for (int i=1; i<=n; ++i) {
            dp[p][i] = dp[p-1][i];
            int x = (1 << (p-1));
            if (i + x <= n && dp[p-1][i+x] < dp[p][i])
                dp[p][i] = dp[p-1][i+x];
        }
    for (int i=1; i<=m; ++i) {
        f >> st >> dr;
        int p = pwr (dr - st + 1);
        g << min (dp[p][st], dp[p][dr - (1<<p) + 1]) << '\n';
    }
    return 0;
}