Cod sursa(job #3313478)

Utilizator Bogdan_RuscanuRuscanu Stefan Bogdan Bogdan_Ruscanu Data 4 octombrie 2025 18:25:42
Problema Range minimum query Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.91 kb
#include <fstream>
#define int long long
const int NMAX=1000000;
const int bs=18;

using namespace std;

ifstream cin("rmq.in");
ofstream cout("rmq.out");

int v[NMAX],mini[NMAX];

int getBucket(int i)
{
    return (i+bs-1)/bs;
}

int query(int l,int r)
{
    int ans=1e9;
    for(int i=l;i<=r;i++)
    {
        if(i%bs==1)
        {
            if(i+bs-1<=r)
            {
                ans=min(ans,mini[getBucket(i)]);
                i+=bs-1;
                continue;
            }
        }
        ans=min(ans,v[i]);
    }
    return ans;
}

signed main()
{
    int n,t;
    cin>>n>>t;
    for(int i=1;i<=n;i++) mini[i]=1e9;
    for(int i=1;i<=n;i++)
    {
        cin>>v[i];
        mini[getBucket(i)]=min(mini[getBucket(i)],v[i]);
    }
    for(int i=1;i<=t;i++)
    {
        int tip,l,r;
        cin>>l>>r;
        cout<<query(l,r)<<endl;
    }
    return 0;
}