Cod sursa(job #2401133)

Utilizator xXoctavianXxStanescu Matei Octavian xXoctavianXx Data 9 aprilie 2019 13:51:56
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.23 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("arbint.in");
ofstream fout("arbint.out");

int a,n,m;
int arbore[400009];
int val;

void update(int st, int dr, int poz, int nr, int i)
{
    if (st>poz || dr<poz || st>dr)
    {
        return;
    }
    if (st==dr)
    {
        arbore[i]=nr;
        return;
    }
    int mij=(st+dr)/2;
    update (st,mij,poz,nr,2*i);
    update (mij+1,dr,poz,nr,2*i+1);
    arbore[i]=max(arbore[i*2],arbore[i*2+1]);
}

int query (int st,int dr,int ist,int idr,int i)
{
    if (st==ist && dr==idr)
    {
        return arbore[i];
    }
    int mij=(st+dr)/2;
    if (idr<=mij)
    {
        return query(st,mij,ist,idr,2*i);
    }else
    {
        if (ist>mij)
        {
            return query(mij+1,dr,ist,idr,2*i+1);
        }
        else
        {
            return max(query(st,mij,ist,mij,2*i),query(mij+1,dr,mij+1,idr,2*i+1));
        }
    }
}
int main()
{
    fin>>n>>m;
    for(int i=1; i<=n; i++)
    {
        fin>>val;
        update(1,n,i,val,1);
    }
    for(int j=1; j<=m; j++)
    {
        int x,a,b;
        fin>>x>>a>>b;
        if(x==0) fout<<query(1, n, a, b, 1)<<"\n";
        else update(1, n, a, b, 1);
    }
}