Cod sursa(job #2999553)

Utilizator Emmy432622Rotariu Emanuel Emmy432622 Data 11 martie 2023 10:23:20
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.16 kb
#include <bits/stdc++.h>

using namespace std;

const int nmax=1e5+5;

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

int V[4*nmax];

void update(int nod, int l, int r, int pos, int val)
{
    if(l==r)V[nod]=val;
    else
    {
        int mid=(l+r)/2;
        if(pos<=mid)
            update(2*nod,l,mid,pos,val);
        else
            update(2*nod+1,mid+1,r,pos,val);
        V[nod]=max(V[2*nod],V[2*nod+1]);
    }
}

int query(int nod, int l, int r, int x, int y)
{
    int ans_l=0, ans_r=0;

    if(l>=x && r<=y)
        return V[nod];
    else
    {
        int mid=(l+r)/2;
        if(mid>=x)
            ans_l=query(2*nod,l,mid,x,y);
        if(mid<y)
            ans_r=query(2*nod+1,mid+1,r,x,y);
        return max(ans_l,ans_r);
    }
}

int main()
{
    int n,q;
    fin >> n >> q;
    for(int i=1 ; i<=n ; ++i)
    {
        int x;
        fin >> x;
        update(1,1,n,i,x);
    }

    for(int i=1 ; i<=q ; ++i)
    {
        int t,x,y;
        fin >> t >> x >> y;

        if(t==1)
             update(1,1,n,x,y);
        else
            fout << query(1,1,n,x,y) << '\n';
    }

    return 0;
}