Cod sursa(job #3036637)

Utilizator Turcanu_DavidTurcanu David Turcanu_David Data 24 martie 2023 18:50:03
Problema Arbori de intervale Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.29 kb
#include <iostream>

using namespace std;

ifstream cin("arbint.in");
ofstream cout("arbint.out");

int v[400005];

void update(int node, int st, int dr, int val, int pos)
{
    if(st == dr)
    {
        v[node]=val;
        return;
    }
    int mid=(st+dr)/2;
    if(pos <= mid)
    {
        update(node*2, st, mid, val, pos);
    }
    if(mid+1 <= pos)
    {
        update(node*2+1, mid+1, dr, val, pos);
    }
    v[node]=max(v[node*2], v[node*2+1]);
}

int query(int node, int st, int dr, int qleft, int qright)
{
    int maxs=0;
    if(qleft <= st && dr <= qright)
    {
        return v[node];
    }
    int mid=(st+dr)/2;
    if(qleft <= mid)
    {
        maxs=max(maxs, query(node*2, st, mid, qleft, qright));
    }
    if(mid+1 <= qright)
    {
        maxs=max(maxs, query(node*2+1, mid+1, dr, qleft, qright));
    }
    return maxs;
}

int main()
{
    int n, m;
    cin>>n>>m;
    for(int i=1; i<=n; i++)
    {
        int a;
        cin>>a;
        update(1, 1, n, a, i);
    }
    for(int i=1; i<=m; i++)
    {
        int c, a, b;
        cin>>c>>a>>b;
        if(c == 0)
        {
            cout<<query(1, 1, n, a, b);
        }
        if(c == 1)
        {
            update(1, 1, n, b, a);
        }
    }
    return 0;
}