Cod sursa(job #3294108)

Utilizator Vlad10Vlad Negut Vlad10 Data 15 aprilie 2025 20:37:19
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 fin ("rmq.in");
ofstream fout ("rmq.out");
int rmq[21][100001];
int log2[100001];
void buildlog(int n){
    log2[1]=0;
    for(int i=2;i<=n;i++){
        log2[i]= 1+log2[i/2];
    }
}
int minim(){
}
int n,q;
int main()
{
    fin>>n>>q;
    buildlog(n);
    for(int i=1;i<=n;i++){
        fin>>rmq[0][i];
    }
    for(int i=1;i<=log2[n];i++){
        int p=(1<<(i-1));
        for(int j=(1<<i);j<=n;j++){
            rmq[i][j]=min(rmq[i-1][j], rmq[i-1][j-p]);
            cout<<rmq[i][j]<<' ';
        }
        cout<<'\n';
    }
    int st,dr;
    for(int i=1;i<=q;i++){
        fin>>st>>dr;
        int p=log2[dr-st+1];
        int q=1<<p;
        fout<<min(rmq[p][st+q-1], rmq[p][dr])<<'\n';
    }
    return 0;
}