Cod sursa(job #2721736)

Utilizator AndreiD31Dragan Andrei AndreiD31 Data 12 martie 2021 10:33:56
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.98 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 mid=(st+dr)/2;
        if(poz<=mid)update(2*nod,st,mid,poz,val);
        else update(2*nod+1,mid+1,dr,poz,val);

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

int query(int nod, int st, int dr, int a, int b)
{
    if(a<=st && dr<=b)return arb[nod];
    else
    {
        int mid=(st+dr)/2,mx1=0,mx2=0;
        if(a<=mid)mx1=query(2*nod,st,mid,a,b);
        if(b>=mid+1)mx2=query(2*nod+1,mid+1,dr,a,b);

        return max(mx1,mx2);
    }
}

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