Cod sursa(job #2903938)

Utilizator RaduIonescuRadu Ionescu RaduIonescu Data 17 mai 2022 21:38:18
Problema Range minimum query Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.08 kb
#include <bits/stdc++.h>

using namespace std;

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

int arb_rmq[400004], n, m, x, y;

int interogare(int n, int st, int dr, int x, int y)
{
    int st_aux, dr_aux;

    dr_aux = st_aux = 1000003;

    if (st>=x && dr<=y) return arb_rmq[n];

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

    if (x <= mij)   st_aux = interogare(n*2, st, mij, x, y);

    if (y > mij)    dr_aux = interogare(n*2+1, mij+1, dr, x, y);

    return min(dr_aux, st_aux);
}

void modificare(int n, int st, int dr, int p, int val)
{
    if (st == dr)
    {
        arb_rmq[n] = val;
        return;
    }

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

    if (p <= mij)   modificare(n*2, st, mij, p, val);

    else modificare(n*2+1, mij+1, dr, p, val);

    arb_rmq[n] = min(arb_rmq[n*2], arb_rmq[n*2+1]);
}

int main()
{
    in>>n>>m;

    for (int i = 1; i <= n; ++i)
    {
        in>>x;
        modificare(1, 1, n, i, x);
    }

    for (int i = 0; i < m; ++i)
    {
        in>>x>>y;
        out<<interogare(1, 1, n, x, y)<<"\n";
    }

    return 0;
}