Cod sursa(job #2366497)

Utilizator Alex221Dumitru Alexandru Alex221 Data 4 martie 2019 20:29:53
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.92 kb
#include <bits/stdc++.h>
#define MAXN (1<<19)
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int v[MAXN],poz,val,n,m,a,b;
bool ok;
void create(int nod, int st, int dr)
{ if(st==dr) v[nod]=val;
    else
    { int mij=(st+dr)/2;
      if(poz<=mij) create(2*nod,st,mij);
       else
         create(2*nod+1,mij+1,dr);
       v[nod]=max(v[nod*2],v[nod*2+1]);
    }
}
int inq(int nod, int st, int dr)
{ if(a<=st && dr<=b) return v[nod];
    else
    { int mij=(st+dr)/2;
      int x1=0,x2=0;
      if(a<=mij) x1=inq(2*nod,st,mij);
      if(b>=mij+1) x2=inq(2*nod+1,mij+1,dr);
      return max(x1,x2);
    }
}
int main()
{ f>>n>>m;
  for(int i=1;i<=n;i++)
  { f>>val;
     poz=i;
     create(1,1,n);
  }
  for(int i=1;i<=m;i++)
  { f>>ok>>a>>b;
     if(ok==0)
     g<<inq(1,1,n)<<'\n';
      else
      { val=b;
         poz=a;
         create(1,1,n);
      }

  }
    return 0;
}