Cod sursa(job #2151416)

Utilizator DeleDelegeanu Alexandru Dele Data 4 martie 2018 14:17:44
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
#include <fstream>
#define MAX 100001
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int n,m,A,B,poz,val,ma,x,i,q,a[4*MAX];
void update(int nod,int st,int dr){
   if(st==dr)
   {
       a[nod]=val;
       return ;
   }
   int mij=(st+dr)/2;
   if(poz<=mij)
     update(2*nod,st,mij);
   else
     update(2*nod+1,mij+1,dr);
   a[nod]=max(a[2*nod],a[2*nod+1]);
}
void query(int nod,int st,int dr){
   if(A<=st&&dr<=B)
   {
       ma=max(ma,a[nod]);
       return ;
   }
   int mij=(st+dr)/2;
   if(A<=mij)
     query(2*nod,st,mij);
   if(mij<B)
     query(2*nod+1,mij+1,dr);
}
int main()
{
    f>>n>>m;
    for(i=1 ; i<=n ; ++i)
    {
        f>>x;
        poz=i;
        val=x;
        update(1,1,n);
    }
    for(i=1 ; i<=m ; ++i)
    {
        f>>q>>A>>B;
        if(q==0)
        {
            ma=0;
            query(1,1,n);
            g<<ma<<'\n';
        }
        else
        {
            poz=A;
            val=B;
            update(1,1,n);
        }
    }
    return 0;
}