Cod sursa(job #2910392)

Utilizator stefan24Sandor Stefan stefan24 Data 20 iunie 2022 14:13:24
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.04 kb
#include <bits/stdc++.h>
using namespace std;
#define nmax 100001
ifstream f("arbint.in");
ofstream g("arbint.out");
int arb[4*nmax+100],mx=-1;
void update(int nod,int st,int dr,int poz,int val)
{
    if(st==dr){
        arb[nod]=val;
        return;
    }
    int m=st+(dr-st)/2;
    if(poz<=m)update(2*nod,st,m,poz,val);
    else update(2*nod+1,m+1,dr,poz,val);
    arb[nod]=max(arb[2*nod],arb[2*nod+1]);
}
void query(int nod,int st,int dr,int start,int stop)
{
    if(start<=st and dr<=stop){
        mx=max(mx,arb[nod]);
        return;
    }
    int m=st+(dr-st)/2;
    if(start<=m)query(2*nod,st,m,start,stop);
    if(m<stop)query(2*nod+1,m+1,dr,start,stop);
}
int main()
{
    int n,m,cer,a,b,x;
    f>>n>>m;
    for(int i=1; i<=n; ++i)
        {
            f>>x;
            update(1,1,n,i,x);
        }
    for(int i=1; i<=m; ++i)
    {
        f>>cer>>a>>b;
        if(cer==1)update(1,1,n,a,b);
        else
        {
            mx=-1;
            query(1,1,n,a,b);
            g<<mx<<"\n";
        }
    }
}