Cod sursa(job #2953616)

Utilizator tonealexandruTone Alexandru tonealexandru Data 11 decembrie 2022 19:38:15
Problema Arbori de intervale Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.23 kb
#include <iostream>
#include <fstream>
#define long long int
using namespace std;
int aint[800005];
ifstream cin("arbint.in");
ofstream cout("arbint.out");

int maxim(int a, int b)
{
    return max(a,b);
}

void update(int x, int poz, int l, int r, int cr)
{
    if(l==r){
        aint[cr]=x;
        return;
    }
    int mid=(l+r)/2;
    if(poz<=mid) update(x, poz, l, mid, 2*cr);
    else update(x, poz, mid+1, r, 2*cr+1);
    aint[cr]=maxim(aint[2*cr],aint[2*cr+1]);
}

int query(int ql, int qr, int l, int r, int cr)
{
    int mid=(l+r)/2;
    if(l==ql && r==qr) return aint[cr];
    if(qr<=mid) return query(ql, qr, l, mid, 2*cr);
    if(ql>mid) return query(ql, qr, mid+1, r, 2*cr+1);
    return maxim(query(ql, mid, l, mid, 2*cr),query(mid+1, qr, mid+1, r, 2*cr+1));

}

int main()
{
    int n,q,x,t,l,r,poz,x2;
    cin>>n>>q;
    for(int i=1;i<=n;++i)
    {
        cin>>x;
        update(x, i, 1, n, 1);
    }

    while(q>0)
    {
        cin>>t;
        if(t==0)
        {
            cin>>l>>r;
            cout<<query(l, r, 1, n, 1)<<'\n';
        }
        else
        {
            cin>>poz>>x2;
            update(x2, poz, 1, n, 1);
        }
        q--;
    }

    return 0;
}