Cod sursa(job #2244610)

Utilizator TudorCaloianCaloian Tudor-Ioan TudorCaloian Data 23 septembrie 2018 11:16:01
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.27 kb
#include <bits/stdc++.h>

using namespace std;

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

int n, m, v[400060], pos, val, maxim, a, b;

void Update(int nod, int l, int r)
{
    if(l == r)
    {
        v[nod] = val;
        return;
    }

        int mid = (l+r)/2;
        if( pos <= mid )
             Update(2*nod, l, mid);
        else
            Update(2*nod+1, mid+1, r);
    v[nod] = max(v[2*nod], v[2*nod+1]);

}

void Querry(int nod, int l, int r)
{
    if(a <= l && b >= r)
    {
        maxim = max(v[nod],maxim);
    }
    else
    {
        int mid= (l+r)/2;
        if(a <= mid) Querry(2*nod, l, mid);
        if(mid < b) Querry(2*nod+1, mid+1, r);

    }
}
int main()
{
    fin >> n >> m;

    for(int i = 1; i <= n; i++)
    {
        int x;
        fin >> x;
        pos = i, val = x;
        Update(1,1,n);
    }
    for(int i = 1; i <= m; i++)
    {
        int x, y, z;
        fin >> x >> y >> z;
        if(x == 0)
        {
            maxim = -100000;
            a = y;
            b = z;
            Querry(1, 1, n);
            fout << maxim << '\n';
        }
        else
        {
            pos = y;
            val = z;
            Update(1, 1, n);
        }
    }
    return 0;
}