Cod sursa(job #2082050)

Utilizator alexandruilieAlex Ilie alexandruilie Data 5 decembrie 2017 17:36:58
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <fstream>
#define nmax 100000
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int n,i,q,arb[4*nmax],x,y,z;
void adaug(int poz,int val,int nod,int a,int b)
{
    if(a==b) arb[nod]=val;
    else{
    int mij=(a+b)/2;
    if(poz<=mij) adaug(poz,val,2*nod,a,mij);
    else adaug(poz,val,2*nod+1,mij+1,b);
    arb[nod]=max(arb[2*nod],arb[2*nod+1]);
    }
}
int maxim(int s,int d,int nod,int a,int b)
{
    int r1=0,r2=0;
    if(s<=a&&b<=d) return arb[nod];
    int mij=(a+b)/2;
    if(s<=mij) r1=maxim(s,d,2*nod,a,mij);
    if(mij<d) r2=maxim(s,d,2*nod+1,mij+1,b);
    return max(r1,r2);

}
int main()
{
    f>>n>>q;
    for(i=1;i<=n;i++)
    {
        f>>x;
        adaug(i,x,1,1,n);
    }
    for(i=1;i<=q;i++)
    {
        f>>x>>y>>z;
        if(x==1) adaug(y,z,1,1,n);
        else g<<maxim(y,z,1,1,n)<<'\n';
    }
    return 0;
}