Cod sursa(job #2765670)

Utilizator stefanvoicaVoica Stefan stefanvoica Data 29 iulie 2021 14:35:56
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.22 kb
#include <bits/stdc++.h>
#define dim 100002
using namespace std;
ifstream fin ("arbint.in");
ofstream fout("arbint.out");
int n, aint[dim*4];

void update (int nod,int st,int dr,int poz,int val)
{
    if (st==dr)
    {
        aint[nod]=val;
        return ;
    }
    int mij=(st+dr)>>1;
    if (poz<=mij)
        update(2*nod,st,mij,poz,val);
    else
        update(2*nod+1,mij+1,dr,poz,val);
    aint[nod]=max(aint[2*nod],aint[2*nod+1]);
}

void update (int x,int y)
{
    return update(1,1,n,x,y);
}

int query (int nod,int st,int dr,int l,int r)
{
    if (st==l && dr==r)
        return aint[nod];
    int mij=(st+dr)>>1;
    if (r<=mij)
        return query (2*nod,st,mij,l,r);
    else if (mij+1<=l)
        return query (2*nod+1,mij+1,dr,l,r);
    else
        return  max(query(2*nod,st,mij,l,mij),query(2*nod+1,mij+1,dr,mij+1,r));
}

int query (int x,int y)
{
    return query(1,1,n,x,y);
}

int main()
{
    int q,tip,x,y,i;
    fin>>n>>q;
    for (i=1; i<=n; i++)
    {
        fin>>x;
        update (i,x);
    }
    while (q--)
    {
        fin>>tip>>x>>y;
        if (tip==1)
            update(x,y);
        else
            fout<<query(x,y)<<'\n';
    }
    return 0;
}