Cod sursa(job #2576557)

Utilizator MariusblockMoga Marius-Ioan Mariusblock Data 6 martie 2020 20:24:55
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda imded Marime 1.19 kb
#include <bits/stdc++.h>
#define inf 1000000003

using namespace std;

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

int arbint[400005];
int n,m,maxim;

void pune(int st,int dr,int nod,int poz,int val){
    if(st == dr){
        arbint[nod] = val;
        return;
    }
    int mid = (st+dr)/2;
    if(poz <= mid)
        pune(st,mid,2*nod,poz,val);
    else{
        pune(mid+1,dr,2*nod+1,poz,val);
    }
    arbint[nod] = max(arbint[2*nod],arbint[2*nod + 1]);
}

void query(int st,int dr,int nod,int poz1,int poz2){
    if(poz1 <= st && dr <= poz2){
        maxim = max(maxim,arbint[nod]);
        return;
    }
    int mid = (st+dr)/2;
    if(poz1 <= mid){
        query(st,mid,2*nod,poz1,poz2);
    }
    if(mid < poz2){
        query(mid+1,dr,2*nod+1,poz1,poz2);
    }
}

int main(){
    int i,a,p,a1,a2;
    fin>>n>>m;
    for(i = 1; i <= n; i++){
        fin>>a;
        pune(1,n,1,i,a);
    }
    for(i = 1; i <= m; i++){
        fin>>p>>a1>>a2;
        if(p){ //pune
            pune(1,n,1,a1,a2);
        }else{ //maximul
            maxim = 0;
            query(1,n,1,a1,a2);
            fout<<maxim<<'\n';
        }
    }
    return 0;
}