Cod sursa(job #1936859)

Utilizator geo_furduifurdui geo geo_furdui Data 23 martie 2017 15:22:22
Problema Arbori de intervale Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.1 kb
#include <fstream>

using namespace std;
ifstream cin ("arbint.in");
ofstream cout ("arbint.out");
int poz,n,m,value;
int arb[100010];
int p,a,b;
void up_date (int st,int dr,int nod)
{
    if(poz==st && st==dr)
        arb[nod]=value;
    else
    {
        int mij=(st+dr)/2;
        if(poz<=mij) up_date(st,mij,nod*2);
        else up_date(mij+1,dr,nod*2+1);
        arb[nod]=max(arb[nod*2],arb[nod*2+1]);
    }
}
void read ()
{
    cin>>n>>m;
    for(int i=1;i<=n;i++)
    { poz=i;
        cin>>value;
        up_date(1,n,1);
    }
}
int ask (int st,int dr,int nod)
{
    if(st>=a && dr<=b)
    return arb[nod];
    else
    {
        int mij=(st+dr)/2;
        int r1=0,r2=0;
        if(a<=mij) r1=ask(st,mij,nod*2);
        if(b>mij) r2=ask(mij+1,dr,nod*2+1);
        return max(r1,r2);
    }
}
void solve ()
{
    for(int i=1;i<=m;i++)
    {
        cin>>p>>a>>b;
        if(p==1)
            poz=a,value=b,up_date(1,n,1);
        else cout<<ask(1,n,1)<<"\n";
    }
}
int main()
{
    read();
    solve();
    cin.close();
    cout.close();
    return 0;
}