Cod sursa(job #2345429)

Utilizator coto2464andrei cotofrei coto2464 Data 16 februarie 2019 12:41:49
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.07 kb
#include <fstream>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int arbore[400000];
void update(int nod,int jos,int sus,int val,int poz)
{
    if(sus==jos)
    {
        arbore[nod]=val;
        return;
    }
    int mij=(sus+jos)/2;
    if(poz<=mij)
        update(nod*2,jos,mij,val,poz);
    else
        update(nod*2+1,mij+1,sus,val,poz);
    arbore[nod]=max(arbore[nod*2],arbore[nod*2+1]);
}

int query(int nod,int jos,int sus,int a,int b)
{
    if(a<=jos&&b>=sus)
    {
        return arbore[nod];
    }
    int mij=(sus+jos)/2;
    int x=0;
    int y=0;
    if(a<=mij)
        x=query(2*nod,jos,mij,a,b);
    if(b>mij)
        y=query(2*nod+1,mij+1,sus,a,b);
    return max(x,y);
}

int main()
{
    int i,n,m,x;
    f>>n>>m;
    for(i=1;i<=n;i++)
    {
        f>>x;
        update(1,1,n,x,i);
    }
    for(i=1;i<=m;i++)
    {
        bool t;
        int a,b;
        f>>t>>a>>b;
        if(t)
            update(1,1,n,b,a);
        else
        {
            g<<query(1,1,n,a,b)<<"\n";
        }
    }
}