Cod sursa(job #2767876)

Utilizator Simon2712Simon Slanina Simon2712 Data 8 august 2021 13:33:13
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.07 kb
#include <fstream>

using namespace std;
ifstream cin("arbint.in");
ofstream cout("arbint.out");
const int N = 100001;
int seg[4*N];
void schimb(int nod,int l,int r,int val,int poz)
{
    if(l==r)
    {
        seg[nod]=val;
    }
    else
    {
        int mid=(l+r)/2;
        if(poz<=mid)
            schimb(2*nod,l,mid,val,poz);
        else
            schimb(2*nod+1,mid+1,r,val,poz);
        seg[nod]=max(seg[2*nod],seg[2*nod+1]);
    }
}
int interval(int nod,int l,int r,int st,int dr)
{
    int mid=(l+r)/2,rez=0;
    if(st<=l && dr>=r)
        return seg[nod];
    if(st<=mid)
        rez=max(rez,interval(2*nod,l,mid,st,dr));
    if(dr>mid)
        rez=max(rez,interval(2*nod+1,mid+1,r,st,dr));
    return rez;
}
int main()
{
    int n,m,i,tip,a,b;
    cin>>n>>m;
    for(i=1; i<=n; i++)
    {
        cin>>a;
        schimb(1,1,n,a,i);
    }
    for(i=1; i<=m; i++)
    {
        cin>>tip>>a>>b;
        if(tip==1)
            schimb(1,1,n,b,a);
        else
            cout<<interval(1,1,n,a,b)<<'\n' ;
    }
    return 0;
}