Cod sursa(job #2966242)

Utilizator RaresPoinaruPoinaru-Rares-Aurel RaresPoinaru Data 16 ianuarie 2023 21:49:42
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.14 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("arbint.in");
ofstream fout ("arbint.out");

const int MAXN=100010;

int aint[4*MAXN],n,q;

void Update (int val, int pos, int l, int r, int node){
    if (l==r){
        aint[node]=val;
        return;
    }

    int mij=(l+r)/2;
    if (mij<pos)
        Update (val,pos,mij+1,r,node*2+1);
    else
        Update (val,pos,l,mij,node*2);
    aint[node]=max (aint[2*node],aint[2*node+1]);
}

int Query (int node, int ql, int qr, int l, int r){
    if (l>qr || r<ql || l>r)
        return -1;

    if (ql<=l && r<=qr)
        return aint[node];

    int mij=(l+r)/2;
    int rezl=Query (2*node,ql,qr,l,mij);
    int rezr=Query (2*node+1,ql,qr,mij+1,r);
    return max (rezl,rezr);
}


int main()
{
    fin >>n>>q;
    for (int i=1;i<=n;++i){
        int x;
        fin >>x;
        Update (x,i,1,n,1);
    }

    for (int i=1;i<=q;++i){
        int tip,a,b;
        fin >>tip>>a>>b;
        if (tip==0)
            fout <<Query (1,a,b,1,n)<<'\n';
        else
            Update (b,a,1,n,1);
    }
    fin.close ();
    fout.close ();
    return 0;
}