Cod sursa(job #3341457)

Utilizator Alexia12345Maftei Alexia Alexia12345 Data 19 februarie 2026 17:05:07
Problema Arbori de intervale Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.21 kb
#include <fstream>
#define NMAX 400005
using namespace std;

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

int arbint[NMAX],n,q;

void update(int val, int poz, int nod, int st, int dr)
{
    if(st==dr)
    {
        if(val==poz)
            arbint[nod]=val;
        return;
    }
    else
    {
        if(poz<=(st+dr)/2 && val<=poz)
            update(val,poz,2*nod,st,(st+dr)/2);
        if(poz>=(st+dr)/2+1 && val>=poz)
            update(val,poz,2*nod+1,(st+dr)/2+1,dr);
    }
    arbint[nod]=max(arbint[nod*2],arbint[nod*2+1]);
}
long long query(int si, int fi, int nod, int st, int dr)
{
    if(si<=st && fi<=dr)
        return arbint[nod];

    if(fi<(st+dr)/2)
        query(si,fi,2*nod,st,(st+dr)/2);
    if(si>(st+dr)/2)
        query(si,fi,2*nod+1,(st+dr)/2+1,dr);

    return max(query(si,fi,2*nod,st,(st+dr)/2,query(si,fi,2*nod+1,(st+dr)/2+1,dr));
}

int main()
{
    fin>>n>>q;
    for(int i=1;i<=n;++i)
    {
        int x;
        fin>>x;
        update(x,i,1,1,n);
    }
    while(q--)
    {
        int cer,a,b;
        fin>>cer>>a>>b;
        if(cer==0)
            fout<<query(a,b,1,1,n)<<endl;
        else
            update(b,a,2*a+1,1,n);
    }
}