Cod sursa(job #1551645)

Utilizator Darius15Darius Pop Darius15 Data 16 decembrie 2015 10:32:58
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
#include <fstream>

using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int v[400000],n,q,x,poz,i,j,MAX,z,t;
void update(int nod,int st,int dr)
{
  int m;
  if (st==dr)
    v[nod]=x;
else {
    m=(st+dr)/2;
    if (poz<=m) update(2*nod,st,m);
    else update(2*nod+1,m+1,dr);
    v[nod]=max(v[2*nod],v[2*nod+1]);
}
}
void query(int nod,int st,int dr)
{
  int m;
  if (i<=st && dr<=j)
     MAX=max(MAX,v[nod]);
  else
  {
    m=(st+dr)/2;
    if (i<=m) query(2*nod,st,m);
    if (j>m)  query(2*nod+1,m+1,dr);
  }
}
int main()
{
    f>>n>>q;
    for (i=1;i<=n;i++)
    {
      f>>x;
      poz=i;
      update(1,1,n);
    }
    for (z=1;z<=q;z++)
    {
       f>>t;
       if (t==0){
          f>>i>>j;
          MAX=0;
          query(1,1,n);
          g<<MAX<<'\n';
       }
       else{
       f>>poz>>x;
       update(1,1,n);
       }
    }
    return 0;
}