Cod sursa(job #1729945)

Utilizator serban_andreiserban andrei-catalin serban_andrei Data 15 iulie 2016 22:04:30
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.25 kb
#include<iostream>
#include<fstream>

#define nmax 100000

using namespace std;
int arbore[6*nmax],n,m,i,x,a,b,poz,val,t;

void update(int nod,int st,int dr,int poz,int val)
{
    if(st==dr)
    {
        arbore[nod]=val;
        return;
    }

    int mijloc=(st+dr)/2;
    if(poz>mijloc)
        update(nod*2+1,mijloc+1,dr,poz,val);
    else if(poz<=mijloc)
        update(nod*2,st,mijloc,poz,val);
    arbore[nod]=max(arbore[nod*2],arbore[nod*2+1]);


}

int query(int nod,int st,int dr,int a ,int b)
{
    if((a<=st)and(dr<=b))
        return arbore[nod];
    long long stanga=0;
    long long dreapta=0;
    int mijloc=(st+dr)/2;
    if(a<=mijloc)
       stanga=query(nod*2,st,mijloc,a,b);
    if(b>mijloc)
        dreapta=query(nod*2+1,mijloc+1,dr,a,b);
    return max(stanga,dreapta);
}




int main()
{

    ifstream f("arbint.in");
    ofstream g("arbint.out");
    f>>n>>m;
    for(i=1;i<=n;i++)
    {
        f>>x;
        update(1,1,n,i,x);
    }
    while(m--)
    {
        f>>t;
        if(!t)
        {
            f>>a>>b;
            g<<query(1,1,n,a,b)<<'\n';
        }
        else
        {
            f>>poz>>val;
            update(1,1,n,poz,val);
        }
    }
    return 0;


}