Cod sursa(job #2865260)

Utilizator RK13Barbu Eduard RK13 Data 8 martie 2022 17:41:10
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.29 kb
#include <bits/stdc++.h>

using namespace std;

ifstream f("arbint.in");
ofstream g("arbint.out");

int n,m,aint[400002];

int querysolver(int st, int dr, int nod, int left, int right)
{int mij;
if (st==left && dr==right) return aint[nod];
    else {mij=(st+dr)/2;
          if (right<=mij) return querysolver(st,mij,2*nod,left,right);
             else if (left>mij) return querysolver(mij+1,dr,2*nod+1,left,right);
                    else return max(querysolver(st,mij,2*nod,left,mij),querysolver(mij+1,dr,2*nod+1,mij+1,right));
         }
}

int query(int st, int dr)
{
return querysolver(1,n,1,st,dr);

}

void updater(int st, int dr, int nod, int poz, int val)
{int mij;
if (st==dr) aint[nod]=val;
    else {mij=(st+dr)/2;
           if (poz<=mij) updater(st,mij,2*nod,poz,val);
                else updater(mij+1,dr,2*nod+1,poz,val);
          aint[nod]=max(aint[2*nod],aint[2*nod+1]);

         }
}

void update(int poz, int val)
{
return updater(1,n,1,poz,val);
}

int main()
{f>>n>>m;
int x,y,p;
for (int i=1;i<=n;i++) {f>>x;
                        update(i,x);
                        }
for (int i=1;i<=m;i++) {f>>p>>x>>y;
                        if (p==0) g<<query(x,y)<<'\n';
                            else update(x,y);
                        }
}