Cod sursa(job #3121177)

Utilizator ValiAntonieAntonie Valentin ValiAntonie Data 11 aprilie 2023 01:43:39
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.66 kb
#include <bits/stdc++.h>
using namespace std;

ifstream fin("rmq.in");
ofstream fout("rmq.out");
const int logg = 17;
int rmq[100005][18],i,j,n,q,p,st,dr,lungime,put=1;

int main()
{
fin>>n>>q;
for(i=1;i<=n;i++){
    fin>>rmq[i][0];
}
for(p=1;p<=logg;p++){
    for(i=1;i<=n;i++){
        if(i+put <= n){
        rmq[i][p] = min(rmq[i][p-1],rmq[i+put][p-1]);
        }
    }
    put <<= 1;
}
for(i=1;i<=q;i++){
    fin>>st>>dr;
    lungime = dr - st + 1;
    put = 1;
    p = 0;
    while(put <= lungime){
        p++;
        put <<= 1;
    }
    p--;
    put >>= 1;
    fout << min(rmq[st][p],rmq[dr-put+1][p]) << '\n';

}

    return 0;
}