Cod sursa(job #1338225)

Utilizator CiurezAndreiCiurez Marius-Andrei CiurezAndrei Data 9 februarie 2015 21:18:52
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.34 kb
#include <fstream>

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

int i, n, m, v[4 * 100010], op, a, b, x, Sol, poz;


void update(int nod, int st, int dr, int poz, int x){
    if(st == dr)
    {
        v[nod] = x;
        return ;
    }
    else
    {
        int mid = (st + dr) / 2;
        if(poz <= mid)
            update(2 * nod, st, mid, poz, x);
        else
            update(2 * nod + 1, mid + 1, dr, poz, x);
        v[nod] = max(v[2 * nod], v[2 * nod + 1]);
    }
}
void query(int nod, int st, int dr, int a, int b){
    if(a <= st && b >= dr)
    {
        Sol = max(v[nod],Sol);
        return ;
    }
    int mid = (st + dr) / 2;
    if(a <= mid)
        query(2 * nod, st, mid, a, b);
    if(b > mid)
        query(2 * nod + 1, mid + 1, dr, a ,b);
}
int main()
{
    fin >> n >> m;
    for(i = 1; i <= n; i ++){
        fin >> x;
        update(1,1,n,i,x);
    }
    for(i = 1; i <= m; i ++)
        {
            Sol = 0;
            fin >> op;
            if(op == 1)
            {
                fin >> poz >> x;
                update(1,1,n,poz,x);
            }
            else
                {
                    fin >> a >> b;
                    query(1,1,n,a,b);
                    fout << Sol << '\n';
                }
        }
    return 0;
}