Cod sursa(job #2903908)

Utilizator VladTalpigaVlad Talpiga VladTalpiga Data 17 mai 2022 21:22:01
Problema Range minimum query Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.19 kb
#include <iostream>
#include <fstream>

using namespace std;

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

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


void update(int n, int left, int right, int poz, int val){

    if(left == right) {

        arbint[n] = val;
        return;
    }

    int mid = (left + right) / 2;

    if(poz <= mid)

        update(n * 2, left, mid, poz, val);
    else
        update(n * 2 + 1, mid + 1, right, poz, val);


    if(arbint[2 * n] <= arbint[2 * n + 1])

        arbint[n] = arbint[2 * n];
    else
        arbint[n] = arbint[2 * n + 1];
}


int query(int n, int left, int right, int a, int b){

    if(left >= a && b >= right)

        return arbint[n];

    int mid = (left + right) / 2, v1 = 100000000, v2 = 100000000;

    if(a <= mid)
        v1 = query(n * 2, left, mid, a, b);

    if(b > mid)
        v2 = query(n * 2 + 1, mid + 1, right, a, b);

    return min(v1, v2);
}


int main() {

    f >> n >> m;

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

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

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

        f >> x >> y;

        g << query(1, 1, n, x, y) << '\n';
    }

return 0;
}