Cod sursa(job #2817902)

Utilizator ElizaTElla Rose ElizaT Data 14 decembrie 2021 17:17:35
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.85 kb
#include <bits/stdc++.h>

using namespace std;

const int NMAX = 1e5,LOG = 25,INF = 1e9;
int v[NMAX + 5],rmq[NMAX + 5][LOG + 5],lg[NMAX + 5];

int main()
{
    ifstream fin("rmq.in");
    ofstream fout("rmq.out");
    int n,m,p = 0,a,b,c;
    fin >> n >> m;
    for (int i = 1;i <= n;i++) {
        fin >> v[i];
        rmq[i][0] = v[i];
        lg[i] = p;
        if (i == (1 << (p + 1)))
            p++;
    }
    for (int i = 1;i <= n;i++)
        for (int j = 1;j <= p;j++)
            rmq[i][j] = INF;
    for (int j = 1;j <= p;j++)
        for (int i = 1;i + (1 << (j - 1)) <= n;i++)
            rmq[i][j] = min(rmq[i][j - 1], rmq[i + (1 << (j - 1))][j - 1]);
    for (int i = 0;i < m;i++) {
        fin >> a >> b;
        c = lg[b - a + 1];
        fout << min(rmq[a][c], rmq[b - (1 << c) + 1][c]) << '\n';
    }
    return 0;
}