Cod sursa(job #3305829)

Utilizator DasapSapunaru Daniel Dasap Data 5 august 2025 17:00:41
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.67 kb
#include <iostream>
#include<fstream>
using namespace std;ifstream fin("rmq.in");ofstream fout("rmq.out");
int n,m,log[100001],dp[20][1000001],st,dr,p,i,v[100001],j;
int main()
{
    fin>>n>>m;for(i=2;i<=n;i++)log[i]=log[i/2]+1;
    for(i=1;i<=n;i++)fin>>v[i];
    for(i=1;i<=n;i++)dp[0][i]=i;
    for(i=1;i<=log[n];i++){
        for(j=1;j<=n;j++){
            if(j+(1<<i)-1>n)break;
            if(v[dp[i-1][j]]<v[dp[i-1][j+(1<<(i-1))]])dp[i][j]=dp[i-1][j];
            else dp[i][j]=dp[i-1][j+(1<<(i-1))];
        }
    }while(m--){
        fin>>st>>dr;
        p=log[dr-st+1];
        fout<<min(v[dp[p][st]],v[dp[p][dr-(1<<p)+1]])<<'\n';
    }
    return 0;
}