Cod sursa(job #2833646)

Utilizator alexxxxxxhalex alx alexxxxxxh Data 15 ianuarie 2022 14:23:42
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.06 kb

#include <bits/stdc++.h>

using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int ar[500001];
int maxx=0;
void update(int nod,int st,int dr,int x,int poz)
{
    if (st==dr) {ar[nod]=x;}
    else
    {
        int mij=(st+dr)/2;
        if (mij<poz) update(2*nod+1,mij+1,dr,x,poz);
        else update(2*nod,st,mij,x,poz);
        ar[nod]=max(ar[2*nod+1],ar[2*nod]);
    }
}
void query(int nod,int st,int dr,int a,int b)
{
    int mij=(st+dr)/2;
    if (a<=st && dr<=b)
    {
        if (maxx<ar[nod]) {maxx=ar[nod];}
        return ;
    }
    if (a<=mij) query(2*nod,st,mij,a,b);
    if (b>mij) query(2*nod+1,mij+1,dr,a,b);
}
int main()
{
    int n,m;
    fin >>n>>m;
    for (int i=1;i<=n;i++)
    {
        int x;
        fin >>x;
        update(1,1,n,x,i);

    }
    for (int i=1;i<=m;i++)
    {
        int a,b,q;
        fin >>q>>a>>b;
        if (q==1) update(1,1,n,b,a);
        else
        {
            maxx=0;
            query(1,1,n,a,b);
            fout << maxx <<"\n";
        }
    }
}