Cod sursa(job #3038082)

Utilizator Alex_Mihai10Mihai Alex-Ioan Alex_Mihai10 Data 26 martie 2023 20:13:25
Problema Range minimum query Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.22 kb
#pragma GCC optimize ("03,unroll-loops")

#include <bits/stdc++.h>

using namespace std;

ifstream f("rmq.in");
ofstream g("rmq.out");

int n,m,i,j,lg,ind,x,y,nrmin,v[100005],minim[320];

int main()
{
    f>>n>>m;
    for(i=1;i<=n;++i)
        f>>v[i];
    lg=sqrt(n);
    for(i=1;i<=lg+1;++i)
        minim[i]=100001;

    i=1;
    while(i+lg-1<=n)
    {
        ++ind;
        for(j=i;j<=i+lg-1;++j)
            if(v[j]<minim[ind])
                minim[ind]=v[j];
        i+=lg;
    }

    if(i<=n)
    {
        ++ind;
        for(j=i;j<=n;++j)
            if(v[j]<minim[ind])
                minim[ind]=v[j];
    }

    for(i=1;i<=m;++i)
    {
        f>>x>>y;
        nrmin=100001;

        while((x-1)%lg!=0)
        {
            if(v[x]<nrmin)
                nrmin=v[x];
            ++x;
        }

        ///g<<nrmin<<'\n';

        ind=(x-1)/lg+1;
        while(ind*lg<=y)
        {
            if(minim[ind]<nrmin)
                nrmin=minim[ind];
            ++ind;
        }
        
        ///g<<nrmin<<'\n';

        --ind;
        for(j=ind*lg+1;j<=y;++j)
            if(v[j]<nrmin)
                nrmin=v[j];

        g<<nrmin<<'\n';

    }
    return 0;
}