Cod sursa(job #2424865)

Utilizator GabyD002Dobrita Gabriel GabyD002 Data 23 mai 2019 22:30:30
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.04 kb
#include <bits/stdc++.h>
#define NM (1<<20)
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int ai[NM],poz,val,a,b,x,eMax;
void Update(int nod,int st,int dr)
{   if(st==dr)
        ai[nod]=x;
    else
    {   int mij=(st+dr)/2;
        if(poz<=mij) Update(2*nod,st,mij);
            else Update(2*nod+1,mij+1,dr);
        ai[nod]=max(ai[nod*2],ai[nod*2+1]);
    }
}
void Interogare(int nod,int st,int dr)
{   if(a<=st && dr<=b) eMax=max(eMax,ai[nod]);
        else
        {   int mij=(st+dr)/2;
            if(a<=mij) Interogare(nod*2,st,mij);
            if(mij<b) Interogare(nod*2+1,mij+1,dr);
        }
}
int main()
{   int n,m;
    f>>n>>m;
    for(int i=1; i<=n; i++)
    {   f>>x;
        poz=i;
        Update(1,1,n);
    }
    while(m--)
    {   int t;
        f>>t>>a>>b;
        if(t)
        {   poz=a;
            x=b;
            Update(1,1,n);
        }
        else
        {   eMax=-1;
            Interogare(1,1,n);
            g<<eMax<<'\n';
        }
    }
    return 0;
}