Cod sursa(job #1653382)

Utilizator Julian.FMI Caluian Iulian Julian. Data 15 martie 2016 22:22:37
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include <iostream>
#include <fstream>
#define nmax 300099
using namespace std;
long v[nmax];
long x,a,b,poz;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
//int max(int a,int b){if(a>b)return a;return b;}

void actualizare(long nod,long st,long dr)
{long mij;
    if(st==dr){v[nod]=x;return;}
    v[nod]=0;
    mij=(st+dr)/2;
    if(poz<=mij){actualizare(2*nod,st,mij);}

    if(poz>mij){actualizare(2*nod+1,mij+1,dr);}
    v[nod]=max(v[2*nod],v[2*nod+1]);

}

long interogare(long nod,long st,long dr)
{long mij,v1=0,v2=0;
    if(a<=st && dr<=b)return v[nod];
    mij=(st+dr)/2;
    if(a<=mij)v1=interogare(2*nod,st,mij);
    if(mij<b)v2=interogare(2*nod+1,mij+1,dr);
    return max(v1,v2);
}

int main()
{long n,m,i;
    fin>>n>>m;
    for(i=1;i<=n;i++)
    {fin>>x;
     poz=i;
        actualizare(1,1,n);
    }

int op;
    for(i=1;i<=m;i++)
    {
        fin>>op>>a>>b;
        if(op==1){poz=a;x=b;actualizare(1,1,n);}
        else {fout<<interogare(1,1,n)<<'\n';}

    }
}