Cod sursa(job #2687289)

Utilizator Xutzu358Ignat Alex Xutzu358 Data 19 decembrie 2020 18:08:21
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.17 kb
#include <bits/stdc++.h>
using namespace std;

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

int n,m;
int arbint[400005];
int x,y;
int pos_search;
int val;
int oo = 20000009;

void initialize_intervals() {
    for (int i=1;i<2*n;i++) {
        arbint[i] = oo;
    }
}

void update_intervals(int pos, int st, int dr) {
    if (pos_search < st || pos_search > dr) {
        return;
    }
    if (st == dr) {
        arbint[pos] = val;
        return;
    }
    int mid = (st+dr)/2;
    update_intervals(2*pos,st,mid);
    update_intervals(2*pos+1,mid+1,dr);
    arbint[pos] = min(arbint[2*pos],arbint[2*pos+1]);
}

int get_min(int pos, int st, int dr) {
    if (y < st || x > dr) {
        return oo;
    }
    if (x <= st && dr <= y) {
        return arbint[pos];
    }
    int mid = (st+dr)/2;
    return min(get_min(2*pos,st,mid),get_min(2*pos+1,mid+1,dr));
}

int main()
{
    initialize_intervals();
    f >> n >> m;
    for (int i=1;i<=n;i++) {
        f >> val;
        pos_search = i;
        update_intervals(1,1,n);
    }
    for (int i=1;i<=m;i++) {
        f >> x >> y;
        g << get_min(1,1,n) << '\n';
    }
    return 0;
}