Cod sursa(job #3036697)

Utilizator mariaionescu2006Ionescu Maria mariaionescu2006 Data 24 martie 2023 20:36:32
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.98 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin ("arbint.in");
ofstream fout ("arbint.out");
const int nmax=4e5;
int n,m,v[nmax],a,b,t;
void update(int a,int poz,int st,int dr,int nod)
{
    if (st==dr) {v[nod]=a;
                 return;}
    int mij=(st+dr)/2;
    if (poz<=mij) update(a,poz,st,mij,2*nod);
    else if (poz>mij) update(a,poz,mij+1,dr,2*nod+1);
    v[nod]=max(v[2*nod],v[2*nod+1]);
}
int query(int l,int r,int st,int dr,int nod)
{
    int mij=(st+dr)/2;
    if (st==l && dr==r) return v[nod];
    if (r<=mij) return query(l,r,st,mij,2*nod);
    else if (l>mij) return query(l,r,mij+1,dr,2*nod+1);
    return max(query(l,mij,st,mij,2*nod),query(mij+1,r,mij+1,dr,2*nod+1));
}
int main()
{
    fin >>n>>m;
    for (int i=1;i<=n;i++)
        {fin >>a;
         update(a,i,1,n,1);}
    for (int i=1;i<=m;i++)
        {fin>>t>>a>>b;
         if (t==1) update(b,a,1,n,1);
         else fout<<query(a,b,1,n,1)<<'\n';}
    return 0;
}