Cod sursa(job #3326626)

Utilizator ValiAntonieqxcfds ValiAntonie Data 29 noiembrie 2025 17:43:29
Problema Range minimum query Scor 30
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.73 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,p2[100005],put2[100005];

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;
}
p = 1;
for (int i = 2; i <= n; i++){
    p2[i] = p2[i/2] + 1;
    if (p2[i] != p2[i-1])
        p *= 2;
    put2[i] = p;
}




for(i=1;i<=q;i++){
    fin>>st>>dr;
    lungime = dr - st + 1;
    fout << min(rmq[st][p2[lungime]],rmq[dr-put2[lungime] +1][p2[lungime]]) << '\n';

}

    return 0;
}