Cod sursa(job #2901507)

Utilizator Stefania_RincuRincu Stefania Stefania_Rincu Data 13 mai 2022 22:35:23
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.12 kb
#include <iostream>
#include <fstream>
#include <math.h>


using namespace std;

ifstream in("arbint.in");
ofstream out("arbint.out");
int arb[1000001];

void update(int n, int st, int dr, int poz, int x)
{
    if(st == dr)
    {
        arb[n] = x;
        return;
    }

    int mij = (st + dr)/2;

    if(poz <= mij) update(2*n, st, mij, poz, x);
    else update(2*n + 1, mij + 1, dr, poz, x);

    arb[n] = max(arb[2*n], arb[2*n + 1]);
}

int query(int n, int st, int dr, int a, int b)
{
    int x = 0, y = 0;

    if(a <= st && dr <= b)
        return arb[n];

    int mij = (st + dr) / 2;
    if(a <= mij)
         x = query(2*n, st, mij, a , b);


    if(b > mij)
         y = query(2*n + 1, mij + 1, dr, a, b);

    return max(x, y);
}
int main()
{
    int n, m, x, a, b, op, i;

	in>>n>>m;

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

	for(i = 0; i < m; i++)
    {
        in>>op>>a>>b;
        if(op == 0)
            out<<query(1, 1, n, a, b)<<"\n";
        else
            update(1, 1, n, a, b);
    }

    return 0;
}