Cod sursa(job #3335056)

Utilizator coldsh1tANdrei coldsh1t Data 21 ianuarie 2026 15:11:11
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.34 kb
#include <iostream>
#include <fstream>

using namespace std;

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

int aint[400005];
int t[100005];

void build(int v,int st,int dr)
{
    if(st==dr)
    {
        aint[v]=t[st];
    }
    else
    {
        int mij=(st+dr)/2;
        build(v*2, st, mij);
        build(v*2+1, mij+1, dr);
        aint[v]=max(aint[v*2], aint[v*2+1]);
    }
}

void update(int v, int st, int dr, int pos, int x)
{
    if(dr<pos or pos<st)
    {
        return;
    }
    if(st==dr)
    {
        aint[v]=x;
        return;
    }
    int mij=(st+dr)/2;
    update(2*v, st, mij, pos, x);
    update(2*v+1, mij+1, dr, pos, x);
    aint[v]=max(aint[v*2], aint[v*2+1]);
}

int q(int v, int st, int dr, int l, int r)
{
    if(st>r || dr<l)
    {
        return -1e9;
    }
    if(l<=st && dr<=r)
    {
        return aint[v];
    }
    int mij=(st+dr)/2;
    return max(q(2*v, st, mij, l, r), q(2*v+1, mij+1, dr, l, r));
}

int main()
{

    int n, m;
    fin>>n>>m;

    for(int i=1;i<=n;i++)
    {
        fin>>t[i];
    }
    build(1,1,n);
    while(m--)
    {
        int tip, x, y;
        fin>>tip>>x>>y;
        if(tip==1)
        {
            update(1,1,n,x,y);
        }
        if(tip==0)
        {
            fout<<q(1,1,n,x,y)<<'\n';
        }
    }
}