Cod sursa(job #2217157)

Utilizator FunnyStockyMihnea Andreescu FunnyStocky Data 29 iunie 2018 13:22:14
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include <fstream>

using namespace std;

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

const int N=100000;
int n;
int A[3*N+5];
int q;

void update(int nod,int cine,int val,int st,int dr) {
    if(cine<st || dr<cine)
        return;
    if(st==dr) {
        A[nod]=val;
        return;
    }
    int med=(st+dr)/2;
    update(2*nod,cine,val,st,med);
    update(2*nod+1,cine,val,med+1,dr);
    A[nod]=max(A[2*nod],A[2*nod+1]);
}

int intrebare(int nod,int a,int b,int st,int dr) {
    if(dr<a || b<st)
        return 0;
    if(a<=st && dr<=b)
        return A[nod];
    int med=(st+dr)/2;
    return max(intrebare(2*nod,a,b,st,med),intrebare(2*nod+1,a,b,med+1,dr));
}

int main() {
    fin>>n>>q;
    for(int i=1;i<=n;i++) {
        int foo;
        fin>>foo;
        update(1,i,foo,1,n);
    }
    while(q-- ){
        int t,a,b;
        fin>>t>>a>>b;
        if(t==1)
            update(1,a,b,1,n);
        else {
            fout<<intrebare(1,a,b,1,n)<<"\n";
        }
    }
    return 0;
}