Cod sursa(job #2904520)

Utilizator florina15Florina florina15 Data 17 mai 2022 23:52:40
Problema Range minimum query Scor 30
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.09 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream f("rmq.in");
ofstream g("rmq.out");

int a[400001], n, m, x, op, y, i;


void f1(int nod, int st, int dr, int p, int val)
{

    if(st == dr) {

        a[nod] = val;
        return;
    }

    int m = (st + dr)>>1;

    if(p <= m)

        f1(nod * 2, st, m, p, val);
    else
        f1(nod * 2 + 1, m + 1, dr, p, val);


    if(a[2 * nod] <= a[2 * nod + 1])

        a[nod] = a[2 * nod];
    else
        a[nod] = a[2 * nod + 1];
}


int rmq(int nod, int st, int dr, int i, int j)
{

    if(st >= i && j >= dr)

        return a[nod];

    int m = (st + dr)>>1, r1 = 99999999, r2 = 99999999;

    if(i <= m)
        r1 = rmq(nod * 2, st, m, i, j);

    if(j > m)
        r2 = rmq(nod * 2 + 1, m + 1, dr, i, j);

    return min(r1, r2);
}


int main() {

    f >> n >> m;

    for(i = 1; i <= n; i++) {

        f >> x;
        f1(1, 1, n, i, x);
    }

    for(i = 1; i <= m; i++) {

        f >> x >> y;

        g << rmq(1, 1, n, x, y) <<endl;
    }

return 0;
}