Cod sursa(job #3294026)

Utilizator stefan_ciureaStefan Ciurea stefan_ciurea Data 15 aprilie 2025 10:19:29
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.85 kb
#include <fstream>
#include <cmath>
using namespace std;

const int Nmax=100005,Pmax=18; ///Pmax este prima putere a lui 2 pentru care 2^Pmax>=Nmax

int v[Nmax],rmq[Pmax][Nmax];

void buildrmq(int n) {
    for (int i=1; i<=n; ++i) {
        rmq[0][i]=v[i];
    }
    for (int j=1; j<Pmax; ++j) {
        for (int i=1; i+(1<<(j-1))<=n; ++i) {
            rmq[j][i]=min(rmq[j-1][i],rmq[j-1][i+(1<<(j-1))]);
        }
    }
}

int main()
{
    ifstream fin("rmq.in");
    ofstream fout("rmq.out");
    int n,m;
    fin>>n>>m;
    for (int i=1; i<=n; ++i) {
        fin>>v[i];
    }
    buildrmq(n);
    for (int i=1; i<=m; ++i) {
        int x,y;
        fin>>x>>y;
        int dif=y-x+1;
        int lg=log2(dif);
        fout<<min(rmq[lg][x],rmq[lg][y-(1<<lg)+1])<<endl;
    }
    fin.close();
    fout.close();
    return 0;
}