Cod sursa(job #1716882)

Utilizator serban_andreiserban andrei-catalin serban_andrei Data 13 iunie 2016 21:16:42
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.34 kb
#include<bits/stdc++.h>

#define nmax 100000

using namespace std;

int ar[4*nmax],a,b,pozitie,valoare,t,n,m,i,x;

void update_pe_elem(int nod,int st,int dr,int pozitie,int valoare)
{
    if(st==dr)
    {
        ar[nod]=valoare;
        return;
    }

    int mijloc=(st+dr)/2;
    if(pozitie>mijloc)
        update_pe_elem(nod*2+1,mijloc+1,dr,pozitie,valoare);
    else if(pozitie<=mijloc)
        update_pe_elem(nod*2,st,mijloc,pozitie,valoare);
    ar[nod]=max(ar[nod*2],ar[nod*2+1]);


}

int query_pe_interval(int nod,int st,int dr,int a ,int b)
{
    if((a<=st)and(dr<=b))
        return ar[nod];
    long long left=0;
    long long right=0;
    int mijloc=(st+dr)/2;
    if(a<=mijloc)
       left=query_pe_interval(nod*2,st,mijloc,a,b);
    if(b>mijloc)
        right=query_pe_interval(nod*2+1,mijloc+1,dr,a,b);
    return max(left,right);
}

int main()
{

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


}