Cod sursa(job #2980560)

Utilizator kywyPApescu tiGEriu kywy Data 16 februarie 2023 17:18:41
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.1 kb
#include<bits/stdc++.h>
using namespace std;

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

int v[400007];
int m, n;

void update(int pos, int val, int st=1, int dr=n, int index=1)
{
    int mij=(st+dr)/2;
    if(st==dr)
    {
        v[index]=val;
        return;
    }
    if(pos<=mij)
        update(pos, val, st, mij, 2*index);
    else
        update(pos, val, mij+1, dr, 2*index+1);

    v[index]=max(v[index*2], v[index*2+1]);
}

int querry(int a, int b, int st=1, int dr=n, int index=1)
{
    int mij=(st+dr)/2;
    if(st>=a && dr<=b) return v[index];
    if(mij>=a && mij<b) return max(querry(a, b, st, mij, index*2), querry(a, b, mij+1, dr, index*2+1));
    if(mij<a) return querry(a, b, mij+1, dr, index*2+1);
    return querry(a, b, st, mij, index*2);
}

int main()
{
    in>>n>>m;
    for(int i=1; i<=n; ++i)
    {
        int x;
        in>>x;
        update(i, x);
    }

    for(int i=1; i<=m; ++i)
    {
        int c, a, b;
        in>>c>>a>>b;
        if(c==1)
            update(a, b);
        else
            out<<querry(a, b)<<"\n";
    }
}