Cod sursa(job #2112230)

Utilizator catalina200029Olteanu Catalina catalina200029 Data 23 ianuarie 2018 11:24:35
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include <bits/stdc++.h>

using namespace std;

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

int n,m,x[500005];

void adaug(int p,int val,int a,int b,int poz) {
    if (a==b) x[poz]=val;
    else {
        int m=(a+b)/2;
        if (p<=m) adaug(p,val,a,m,poz*2);
        else adaug(p,val,m+1,b,poz*2+1);
        x[poz]=max(x[poz*2],x[poz*2+1]);
    }
}

int interog(int st,int dr,int a,int b,int poz) {
    if (a<=st && dr<=b) return x[poz];
    else {
        int m=(st+dr)/2,k=0;
        if (a<=m) k=interog(st,m,a,b,poz*2);
        if (m<b) k=max(k,interog(m+1,dr,a,b,poz*2+1));
        return k;
    }
}

void citire() {
    int i,j,val,p,a,b;
    f>>n>>m;
    for (i=1;i<=n;i++) {
        f>>val;
        adaug(i,val,1,n,1);
    }
    for (i=1;i<=m;i++) {
        f>>p>>a>>b;
        if (p==1)
            adaug(a,b,1,n,1);
        else g<<interog(1,n,a,b,1)<<'\n';
    }
}

int main() {
    int i,j;
    citire();
    return 0;
}