Cod sursa(job #3345565)

Utilizator marius_rus47Rus Marius marius_rus47 Data 10 martie 2026 09:17:47
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.25 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");

const int NM=100001, Inf=(1<<31)-1;

int N,M,v[4*NM],a[NM];

void build (int n, int x, int y) {
    if (x==y) {
        v[n]=a[x];
    } else {
        int mij=(x+y)/2;
        build (n*2,x,mij);
        build (n*2+1,mij+1,y);
        v[n]=max(v[n*2],v[n*2+1]);
    }
}

int maxim (int n, int x, int y, int l, int r) {
    if (l>r) return -Inf;

    if (l==x&&r==y) return v[n];

    int mij=(x+y)/2;
    return max(maxim(n*2,x,mij,l,min(r,mij)),maxim(n*2+1,mij+1,y,max(l,mij+1),r));
}

void update (int n, int x, int y, int pos, int val) {
    if (x==y) v[n]=val;
    else {
        int mij=(x+y)/2;
        if (pos<=mij) {
            update(n*2,x,mij,pos,val);
        } else {
            update(n*2+1,mij+1,y,pos,val);
        }
        v[n]=max(v[n*2],v[n*2+1]);
    }
}

int main()
{
    fin>>N>>M;
    for (int i=1;i<=N;i++) {
        fin>>a[i];
    }
    build(1,1,N);
    for (int i=1;i<=M;i++) {
        int x,y,z;
        fin>>x>>y>>z;
        if (x==0) {
            fout<<maxim(1,1,N,y,z)<<'\n';
        } else {
            a[y]=z;
            update(1,1,N,y,z);
        }
    }
    return 0;
}