Cod sursa(job #2509453)

Utilizator valentin12Valentin Ion Semen valentin12 Data 14 decembrie 2019 11:14:04
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.04 kb
#include <fstream>

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

int n,A[400010],v[100010],sol,m,i,a,b,t;

void build(int nod,int st,int dr)
{
if(st==dr) A[nod]=v[st];
   else {
         int mid=(st+dr)/2;
         build(2*nod,st,mid);
         build(2*nod+1,mid+1,dr);
         A[nod]=max(A[2*nod],A[2*nod+1]);
        }
}

void update(int nod,int st,int dr,int p,int x)
{
 if(st==dr) A[nod]=x;
 else {int mid=(st+dr)/2;
       if(p<=mid) update(2*nod,st,mid,a,b);
       else update(2*nod+1,mid+1,dr,p,x);
       A[nod]=max(A[2*nod],A[2*nod+1]);
      }
}

void query(int nod,int st,int dr,int a,int b)
{
 if(a<=st&&dr<=b) sol=max(sol,A[nod]);
 else {int mid=(st+dr)/2;
       if(a<=mid) query(2*nod,st,mid,a,b);
       if(b>mid)  query(2*nod+1,mid+1,dr,a,b);

      }

}

int main()
{f>>n>>m;
 for(i=1;i<=n;i++)
    f>>v[i];
 build(1,1,n);
 for(i=1;i<=m;i++)
 {f>>t>>a>>b;
  if(t==0)
  {
  sol=0;
  query(1,1,n,a,b);
  g<<sol<<'\n';
  }
  else update(1,1,n,a,b);

 }
return 0;
}