Cod sursa(job #2084671)

Utilizator marumatMatei Marussi Alexandru marumat Data 9 decembrie 2017 11:23:55
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include <fstream>
#include <cmath>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int a,b,i,x,arb[400001],n,m;
void update(int nod,int a,int b,int poz,int val)
{int mij;
    if(a==b) arb[nod]=val;
    else{
        mij=(a+b)/2;
        if(poz<=mij)update(2*nod,a,mij,poz,val);
        else update(2*nod+1,mij+1,b,poz,val);
        arb[nod]=max(arb[2*nod],arb[2*nod+1]);
    }
}
 int querry(int nod,int a,int b,int qa,int qb)
    {
        int mij,rez1=-1,rez2=-1;
        if(qa<=a && b<=qb)return arb[nod];
        mij=(a+b)/2;
        if(qa<=mij)rez1=querry(2*nod,a,mij,qa,qb);
            if(mij<qb)rez2=querry(2*nod+1,mij+1,b,qa,qb);
        return max(rez1,rez2);
    }
int main()
{
    f>>n>>m;
    for(i=1;i<=n;i++)
    {f>>x;
    update(1,1,n,i,x);
    }
    for(i=1;i<=m;i++)
    {f>>x>>a>>b;
        if(x==1)update(1,1,n,a,b);
        else g<<querry(1,1,n,a,b)<<'\n';
    }
    return 0;
}