Cod sursa(job #3354205)

Utilizator gaminggodBarbulescu Luca Traian gaminggod Data 16 mai 2026 13:00:20
Problema Range minimum query Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.92 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("rmq.in");
ofstream fout("rmq.out");
vector <int> v,p2;
vector<vector<int>> r;

const int INF=1e9;

void precalcul()
{
    int n=(int)v.size()-1;
    p2.resize(n+1);
    p2[1]=0;
    for(int i=2;i<=n;i++)
    {
        p2[i]=1+p2[i/2];
    }
    int m=0;
    while((1<<(m+1))<=n) m++;
    r.resize(m+1,vector<int>(n+1,INF));
    r[0]=v;
    for(int i=1;i<=m;i++)
    {
        for(int j=(1<<i);j<=n;j++)
        {
            int p=(1<<(i-1));
            r[i][j]=min(r[i-1][j-p],r[i-1][j]);
        }
    }
}

    int minim(int st, int dr)
    {
        int k=p2[dr-st+1];
        int p=(1<<k);
        return min(r[k][st+p-1],r[k][dr]);
    }

int main()
{
    int n,q;
    fin>>n>>q;
    v.resize(n+1);
    for(int i=1;i<=n;i++) cin>>v[i];
    precalcul();
    while(q--)
    {
        int st,dr;
        fin>>st>>dr;
        fout<<minim(st,dr)<<"\n";
    }
    return 0;
}