Cod sursa(job #3148796)

Utilizator Robert_MitriRobert Mitri Robert_Mitri Data 4 septembrie 2023 13:35:42
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.13 kb
#include <fstream>
#include <vector>
#include <climits>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");

#define sz 100005
int n;
int m;

int tree[2 * sz];

void build()
{
    for (int i=0; i<n; i++)
        fin>>tree[n+i];

    for (int i = n - 1; i > 0; --i)
        tree[i] = max(tree[i<<1] , tree[(i<<1) + 1]);
}

void update(int p, int value)
{
    p += n;
    tree[p] = value;

    for (int i=p; i > 1; i >>= 1)
        tree[i>>1] =max( tree[i] , tree[i^1]);
}

int query(int l, int r)
{
    int res = INT_MIN;
    l+=n;
    r+=n;

    for (; l <= r; l >>= 1, r >>= 1)
    {
        if (l%2==1)
            res = max(res,tree[l++]);
        if (r%2==0)
            res = max(res,tree[r--]);
    }

    return res;
}


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

    build();
    for(int i=1;i<=m;i++)
    {
        int q,a,b;
        fin>>q>>a>>b;

        if(q==0)
        {
            a--;
            b--;
            int rez = query(a,b);
            fout<<rez<<'\n';
        }
        else
        {
            a--;
            update(a,b);
        }

    }
}