Cod sursa(job #2209738)

Utilizator lucia.cstCostache Lucia lucia.cst Data 4 iunie 2018 16:05:21
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include<fstream>

using namespace std;

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

int t[400005];

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

int query (int a, int b, int p, int st, int dr){
    int r1=0, r2=0;
    if(st<=a && dr>=b)
        return t[p];
    int mid=(a+b)/2;
    if(st<=mid)
        r1=query(a, mid, p*2, st, dr);
    if(mid<dr)
        r2=query(mid+1, b, p*2+1, st, dr);
    return max(r1, r2);
}

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