Cod sursa(job #3281845)

Utilizator stefan_dore_Stefan Dore stefan_dore_ Data 3 martie 2025 20:18:08
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.81 kb
#include <iostream>
#include <fstream>
using namespace std;

ifstream f ("rmq.in");
ofstream g ("rmq.out");

const int NMAX = 100000,
          KMAX = 16;

int N, T[KMAX+1][NMAX+1], lg2[NMAX+1];

void buildSparseTable() {
    for (int i=1; (1<<i) <= N; i++)
        for (int j=1; j + (1<<i) - 1 <= N; j++)
            T[i][j] = min(T[i-1][j], T[i-1][j + (1<<(i-1))]);
}

int querry(int x, int y) {
    int k = lg2[y-x+1];
    return min(T[k][x], T[k][y-(1<<k)+1]);
}

int main()
{
    int M, x, y;
    f >> N >> M;
    lg2[0] = -1;
    for (int i=1; i<=N; i++) {
        f >> T[0][i];
        lg2[i] = lg2[i>>1]+1;
    }
    lg2[0] = 0;

    buildSparseTable();

    while(M--) {
        f >> x >> y;
        g << querry(x, y) << '\n';
    }
    f.close();
    g.close();
    return 0;
}