Cod sursa(job #2952970)

Utilizator GILIEDAVIDGilie David Florin GILIEDAVID Data 10 decembrie 2022 11:45:06
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.93 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int n,i,m,x,t,p,q,v[400000];
void update(int nod,int l,int r,int poz,int val)
{
    int m;
    if(l==r) v[nod]=val;
    else
    {
        m=(l+r)/2;
        if(poz<=m)
            update(2*nod,l,m,poz,val);
        else
            update(2*nod+1,m+1,r,poz,val);
        v[nod]=max(v[2*nod],v[2*nod+1]);
    }
}

int query(int nod,int l,int r,int p, int q)
{
    int m,x1=0,x2=0;
    if(p<=l&&r<=q)
        return v[nod];
    else
    {
        m=(l+r)/2;
        if(p<=m)
            x1=query(2*nod,l,m,p,q);
        if(m<q)
            x2=query(2*nod+1,m+1,r,p,q);
        return max(x1,x2);
    }
}
int main()
{f>>n>>m;
for(i=1;i<=n;i++)
{
    f>>x;
    update(1,1,n,i,x);
}
for(i=1;i<=m;i++)
{f>>t>>p>>q;
 if(t==1) update(1,1,n,p,q);
 else
    g<<query(1,1,n,p,q)<<'\n';
}
    return 0;
}