Cod sursa(job #3289559)

Utilizator Tudor_CCTudor Cocu Tudor_CC Data 27 martie 2025 13:49:11
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.99 kb
#include <bits/stdc++.h>

using namespace std;

int p[20];

int v[100005][17];

int main()
{
    ifstream cin("rmq.in");
    ofstream cout("rmq.out");
    int n,q,st,dr;
    cin>>n>>q;
    p[0]=1;
    for(int i=1;i<=17;++i)
    {
        p[i]=p[i-1]*2;
    }
    for(int i=1;i<=n;++i)
    {
        cin>>v[i][0];
    }
    for(int pt=1;pt<=17;++pt)
    {
        for(int i=1;(i+p[pt]-1)<=n;++i)
        {
            v[i][pt]=min(v[i][pt-1],v[i+p[pt-1]][pt-1]);
        }
    }
    for(int i=1;i<=q;++i)
    {
        cin>>st>>dr;
        int l=dr-st+1;
        int s=0,d=17,mij,in=-1;
        while(s<=d)
        {
            mij=(s+d)/2;
            if(p[mij]<=l)
            {
                in=mij;
                s=mij+1;
            }
            else
            {
                d=mij-1;
            }
        }
        //cout<<v[st][in]<<" "<<v[dr-p[in]+1][in]<<"\n";
        cout<<min(v[st][in],v[dr-p[in]+1][in])<<"\n";
    }
    return 0;
}