Cod sursa(job #2873162)

Utilizator amunnumeVlad Patrascu amunnume Data 18 martie 2022 19:20:33
Problema Range minimum query Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.88 kb
#include <fstream>
#include <cmath>
using namespace std;
ifstream cin("rmq.in");
ofstream cout("rmq.out");
int n,m,i,len,b[100005],len1,len2=-1,mn,l,r,v[100005];
int main()
{
    cin>>n>>m;
    for(i=0; i<n; ++i) cin>>v[i];
    len=(int)sqrt(n+.0)+1;
    for(i=0; i<n; ++i)
    {
        len1=i/len;
        if(len1!=len2)
        {
            mn=1200000;
        }
        mn=min(mn,v[i]);
        b[len1]=mn;
        len2=len1;
    }
    for(int j=1; j<=m; ++j)
    {
        cin>>l>>r;
        --l;
        --r;
        mn=1200000;
        for(i=l; i<=r;)
        {
            if(i%len==0 && (i+len-1)<=r)
            {
                mn=min(mn,b[i/len]);
                i+=len;
            }
            else
            {
                mn=min(mn,v[i]);
                ++i;
            }
        }
        cout<<mn<<'\n';
    }
    return 0;
}