Cod sursa(job #3348005)

Utilizator Octavian09Dore Octaviam Octavian09 Data 19 martie 2026 10:24:38
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.94 kb
#include <iostream>
#include <fstream>
#include <iomanip>

using namespace std;

const int NMAX=100001,
          KMAX=17;

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

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

//void afisT(){
//    for(int i=0;(1<<i)<=N;i++){
//        for(int j=1;j<=N;j++)
//            cout << setw(3) << T[i][j];
//        cout << '\n';
//    }
//}

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 query(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();
    //afisT();
    //
    while(M--){
        f >> x >> y;
        g << query(x,y) << '\n';
    }
    return 0;
}