Cod sursa(job #2547225)

Utilizator VladAdrianaVlad Adriana VladAdriana Data 15 februarie 2020 10:13:52
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.1 kb
#include <fstream>

using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int n,m,x,y,op,St[400005];
void update(int nod, int poz, int val, int st, int dr)
{
    ///verific nodul cu indice NOD care reprezinta intervalul [ST,DR], caut sa adaug/schimb pe pozitia POZ valoarea VAL
    if(st==dr) St[nod]=val;
    else
    {
        int mij=(st+dr)/2;
        if(mij>=poz) update(2*nod, poz, val, st, mij);
        else update(2*nod+1, poz, val, mij+1, dr);
        St[nod]=max(St[2*nod],St[2*nod+1]);
    }
}
int query(int nod, int st, int dr, int x, int y)
{
    int l=0,r=0;
    if(st>=x&&dr<=y)
        return St[nod];
    else
    {
        int mij=(st+dr)/2;
        if(mij>=x) l=query(2*nod,st,mij,x,y);
        if(mij<y) r=query(2*nod+1,mij+1,dr,x,y);
        return max(l,r);
    }
}
int main()
{
    int i;
    fin>>n>>m;
    for(i=1;i<=n;i++)
    {
        fin>>x;
        update(1,i,x,1,n);
    }
    for(i=1;i<=m;i++)
    {
        fin>>op>>x>>y;
        if(op) update(1,x,y,1,n);
        else fout<<query(1,1,n,x,y)<<'\n';
    }
    return 0;
}