Cod sursa(job #2063552)

Utilizator leraValeria lera Data 11 noiembrie 2017 12:04:07
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.23 kb
#include <iostream>
#include <fstream>
#define Nmax 100005

using namespace std;

ifstream fin("arbint.in");
ofstream fout("arbint.out");

int maxim , arb[4 * Nmax], n, m, a[Nmax], x, y, op;
void update(int nod, int poz, int val, int st, int dr)
{
    int mij = (st + dr)/2;
    if(st == dr && st == poz)
    {
        arb[nod] = val;
        return;
    }
    if(poz <= mij)
	update(nod * 2, poz, val, st, mij);
    else
	 update(nod * 2 + 1, poz, val, mij + 1, dr);
    arb[nod] = max(arb[2*nod], arb[2*nod + 1]);
}
void query(int nod, int l, int r, int st, int dr)//st dr interval mare l r intervalu meu
{
    int mij = (st + dr)/2;
    if(l <= st && dr <= r)
    {
        maxim = max(maxim, arb[nod]);
        return;
    }
    if(l > dr || r < st)return;
    query(nod * 2, l, r, st, mij);
    query(nod * 2 + 1, l, r, mij + 1, dr);
}
int main()
{
    fin >> n >> m;
    for(int i = 1; i <= n; i++)
    {
        fin >> a[i];
        update(1, i, a[i], 1, n);
    }
    for(int i = 1; i <= m; i++)
    {
        fin >> op >> x >> y;
        if(op == 0)
        {
            maxim = -1;
            query(1, x, y, 1, n);
            fout << maxim << '\n';
        }
        else
        {
            update(1, x, y, 1, n);
        }
    }

    return 0;
}