Cod sursa(job #2566996)

Utilizator spartanul300Vasile Andrei spartanul300 Data 3 martie 2020 14:23:53
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.97 kb
#include <bits/stdc++.h>

using namespace std;

ifstream f("arbint.in");
ofstream g("arbint.out");

int arb[100100*4];

void update(int nod,int st,int dr,int poz,int val)
{
    if(st==dr)arb[nod]=val;
    else
    {
        int mij=(st+dr)/2;
        if(poz<=mij)update(2*nod,st,mij,poz,val);
        else update(2*nod+1,mij+1,dr,poz,val);

        arb[nod]=max(arb[2*nod],arb[2*nod+1]);
    }
}

int querry(int nod,int st,int dr,int a,int b)
{
    if(a<=st && dr<=b)return arb[nod];
    else
    {
        int x1=0,x2=0,mij=(st+dr)/2;
        if(a<=mij)x1=querry(2*nod,st,mij,a,b);
        if(mij+1<=b)x2=querry(2*nod+1,mij+1,dr,a,b);

        return max(x1,x2);
    }
}

int n,m,i,a,b,x;
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==0)g<<querry(1,1,n,a,b)<<'\n';
        else update(1,1,n,a,b);
    }
    return 0;
}