Cod sursa(job #2853556)

Utilizator MateiStoianStoian Matei Octavian MateiStoian Data 20 februarie 2022 13:44:34
Problema Range minimum query Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.14 kb
#include <bits/stdc++.h>
using namespace std;
#define NMAX 100000
int x, y, n, data[4 * 100001], m,minim=NMAX;
void update(int ind, int st, int dr,int i,int val)
{
    if (st == dr)
    {
        data[ind] = val;
        return;
    }
    int mij = (st + dr) / 2;
    if(i<=mij){
        update(2*ind,st,mij,i,val);
    }
    else{
        update(2*ind+1,mij+1,dr,i,val);
    }
    data[ind] = min(data[2*ind],data[2*ind+1]);
}
void query(int ind, int st, int dr)
{
    if (x <= st && dr <= y)
    {
        minim = min(minim,data[ind]);
        return;
    }
    
    int mij = (st + dr) / 2;
    if(x<=mij){
        query(2*ind,st,mij);
    }
    if(mij<y){
        query(2*ind+1,mij+1,dr);
    }
}
int main()
{
    freopen("rmq.in","r",stdin);
    freopen("rmq.out","w",stdout);
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    cin >> n >> m;
    for (int i = 1; i <= n; i++)
    {
        int k;
        cin>>k;
        update(1,1,n,i,k);
    }
    for (; m; m--)
    {
        minim = NMAX;
        cin >> x >> y;
        query(1, 1, n);
        cout<<minim<<'\n';
    }
    return 0;
}