Cod sursa(job #2419463)

Utilizator andaraluca2001Anda Epure andaraluca2001 Data 8 mai 2019 17:18:43
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.07 kb
#include <fstream>

using namespace std;
int arb[(1<<18)],a,b,poz,val,n,m,cod;

ifstream in("arbint.in");
ofstream out("arbint.out");
void update(int p, int st, int dr) //p=pozitia din arbore, st=capatul stang al intervalului, dr=capatyul drept al intervalului
{
     if(st==dr)
     {
        arb[p]=val;
        return;

     }

     int m=(st+dr)/2;
     if(poz<=m) update(2*p,st,m);



     else update(2*p+1,m+1,dr);

     arb[p]=max(arb[2*p],arb[2*p+1]);




     }


 int query(int p, int st, int dr)
 {
     if(a<=st && dr<=b) return arb[p];

     int m=(st+dr)/2,m1=-1,m2=-1;

     if(a<=m) m1=query(2*p,st,m);
     if(b>m) m2=query(2*p+1,m+1,dr);

     return max(m1,m2);

 }

int main()
{
    in>>n>>m;

    for(int i=1;i<=n;i++)
    {
       in>>val;
       poz = i;
       update(1,1,n);
    }

    for(int i=1;i<=m;i++)
    {
         in>>cod;
         if(cod==0)
         {
            in>>a>>b;
            out<<query(1,1,n)<<"\n";
         }
         else
         {
            in>>poz>>val;
            //arb[a]=b;
            update(1,1,n);
         }


    }
    return 0;
}