Cod sursa(job #3366447)

Utilizator medeeavasile56@gmail.comVasile Medeea [email protected] Data 1 octombrie 2026 16:11:50
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.15 kb
// rmq varianta cu aint iterativ
#include <fstream>
#include <vector>
#include <climits>
using namespace std;
ifstream cin("rmq.in");
ofstream cout("rmq.out");
vector<int> aint,sol;
int n,n_nou,queries;
int actualizare_n(int n)
{
    while(n&(n-1)){
        n+=n&-n;
    } return n;
}

void set(int pos,int val)
{
    pos+=n_nou; aint[pos]=val;
    for(pos/=2;pos;pos/=2)
        aint[pos]=min(aint[2*pos],aint[2*pos+1]);
}

int answer_query(int l,int r)
{
    int mini=INT_MAX;
    l+=n_nou; r+=n_nou;
    while(l<=r)
    {
        if(l&1){
            mini=min(mini,aint[l]);
            l++;
        }
        if(!(r&1)){
            mini=min(mini,aint[r]);
            r--;
        }
        l>>=1;
        r>>=1;
    }
    return mini;
}

int main()
{
    cin>>n>>queries;

    n_nou=actualizare_n(n);
    aint.resize(2*n_nou,INT_MAX);

    for(int i=0;i<n;i++){
        int value; cin>>value; set(i,value);
    }

    for(int i=0;i<queries;i++){
        int left,right;
        cin>>left>>right;
        sol.push_back(answer_query(left-1,right-1));
    }

    for(int x:sol) cout<<x<<'\n';

    return 0;
}