Cod sursa(job #2084137)

Utilizator bebeetarepredescu bebeetare Data 8 decembrie 2017 17:51:18
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include <fstream>

using namespace std;
int n,m,i,x,y,t,arbore[400005];
ifstream f("arbint.in");
ofstream g("arbint.out");
void update(int nod,int a,int b,int poz,int val)
{
    int mij;
    if(a==b)arbore[nod]=val;
    else
    {
        mij=(a+b)/2;
        if(poz<=mij)
        {
            update(nod*2,a,mij,poz,val);
        }
        else update(nod*2+1,mij+1,b,poz,val);
        arbore[nod]=max(arbore[nod*2],arbore[nod*2+1]);
    }
}
int querry(int nod,int a,int b,int qa,int qb)
{
    int mij,rez=-1,rez1=-1;
    if(qa<=a && qb>=b)return arbore[nod];
    else
    {
        mij=(a+b)/2;
        if(qa<=mij)rez=querry(nod*2,a,mij,qa,qb);
        if (mij<qb)rez1=querry(nod*2+1,mij+1,b,qa,qb);
        return max(rez,rez1);
    }
}
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>>t>>x>>y;
        if(t==1)
        {
            update(1,1,n,x,y);
        }
        else
        {
            g<<querry(1,1,n,x,y)<<'\n';
        }
    }
    return 0;
}