Cod sursa(job #2708905)

Utilizator racleta31Andreican Rares racleta31 Data 19 februarie 2021 16:03:34
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.3 kb
#include <bits/stdc++.h>
#define dim 100001
using namespace std;
ifstream in("arbint.in");
ofstream out("arbint.out");
int n, m;
int a[4*dim + 66];
int x, y, val , z, pos, stanga, dreapta, maxim;
void Update(int nod ,int st, int dr, int pos, int val)
{
    if(st == dr)
    {
        a[nod] = val;
        return;
    }
    int mid = (st + dr) /2;
    if( pos <= mid)
    {
        Update(2*nod, st, mid, pos, val);
    }
    else
    {
        Update(2*nod+1, mid+1, dr, pos, val);
    }
    a[nod] = max(a[2*nod], a[2*nod + 1]);
}
void Query(int nod, int st, int dr, int stanga, int dreapta)
{
    if(stanga <= st and dr <= dreapta)
    {
        maxim = max(maxim, a[nod]);
             return;
    }
    int mid = (st+dr)/2;
    if(stanga <=mid)
    {
        Query(2*nod, st, mid, stanga, dreapta);
    }
    if(dreapta > mid)
    {
        Query(2*nod+1, mid+1, dr, stanga, dreapta);
    }
}
int  main()
{
    in>>n>>m;
    for(int i=1;i<=n;i++)
    {
        in>>x;
       Update(1, 1, n, i , x);
    }
    for(int i=1;i<=m;i++)
    {
        in>>x>>y>>z;
        if(x == 0)
        {
            maxim = -1;
            Query(1, 1, n, y, z);
            out<<maxim<<'\n';
        }
        else
        {
            Update(1, 1, n, y, z);
        }
    }
}