Cod sursa(job #3313469)

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

using namespace std;

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

int lazy[NMAX],mini[NMAX],v[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,lazy[getBucket(i)]+mini[getBucket(i)]);
                i+=bs-1;
                continue;
            }
        }
        ans=min(ans,v[i]+lazy[getBucket(i)]);
    }
    return ans;
}

signed main()
{
    int n,t;
    cin>>n>>t;
    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;
}