Cod sursa(job #2681248)

Utilizator CiboAndreiAndrei Cibo CiboAndrei Data 5 decembrie 2020 10:43:30
Problema Range minimum query Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.16 kb
#include <bits/stdc++.h>

using namespace std;

//ifstream f("data.in");
//ofstream g("data.out");
#define f cin
#define g cout

const int dim = 1e5 + 2;

int n, q;
int v[4 * dim];
int mn;

void update(int nod, int st, int dr, int val, int poz){
    if(st == dr){
        v[nod] = val;
    } else {
        int m = (st + dr) / 2;

        if(poz <= m)
            update(2 * nod, st, m, val, poz);
        else update(2 * nod + 1, m + 1, dr, val, poz);

        v[nod] = min(v[2 * nod], v[2 * nod + 1]);
    }
}

void query(int nod, int st, int dr, int capst, int capdr){
    if(capst <= st && dr <= capdr){
        mn = min(mn, v[nod]);
    } else {
        int m = (st + dr) / 2;

        if(m >= capst)
            query(2 * nod, st, m, capst, capdr);
        if(m < capdr)
            query(2 * nod + 1, m + 1, dr, capst, capdr);
    }
}

int main()
{
    int i, j, x, y;

    f >> n >> q;

    for(i = 1; i <= n; ++i){
        f >> x;
        update(1, 1, n, x, i);
    }

    for(i = 1; i <= q; ++i){
        f >> x >> y;
        mn = INT_MAX;
        query(1, 1, n, x, y);
        g << mn << '\n';
    }

    return 0;
}