Cod sursa(job #2508035)

Utilizator eusebiu_alexandruMorar Eusebiu eusebiu_alexandru Data 11 decembrie 2019 13:58:44
Problema Arbori de intervale Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.12 kb
#include<fstream>
#define nmax 100005
using namespace std;
ifstream f ("arbint.in");
ofstream g ("arbint.out");
int v[4*nmax],i,j,st,dr,a,b,valori[nmax],valoare,pozitie,maxi=-1,mij,n,m,cerinta;
void update(int nod,int st,int dr)
{
    if(st==dr)
    {
        v[nod]=valoare;
       return;
    }
    else
    {
      int   mij=(st+dr)/2;
        if(pozitie<=mij)
          update(2*nod,st,mij);
        if(pozitie>mij)
           update(2*nod+1,mij+1,dr);
    }
    v[nod]=max(v[nod*2],v[nod*2+1]);
}
void query(int nod,int st,int dr)
{
    if(a<=st && dr<=b)
    {
     maxi=max(maxi,v[nod]);
     return;
    }
    else
    {
        mij=(st+dr)/2;
        if(a<=mij)
           query(nod*2,st,mij);
        if(b>mij)
            query(nod*2+1,mij+1,dr);
    }
}
int main()
{
   f>>n>>m;
   for(i=1;i<=n;i++)
   {
       f>>valoare;
       pozitie=i;
       update(1,1,n);
   }
   for(i=1;i<=m;i++)
   {
       f>>cerinta;
       if(cerinta==0)
       {
           f>>a>>b;
           maxi=0;
           query(1,1,n);
           g<<maxi<<'\n';
       }
       else
       {
           f>>pozitie>>valoare;
           update(1,1,n);
       }
   }
}