Cod sursa(job #1703559)

Utilizator AlexandruRudiAlexandru Rudi AlexandruRudi Data 17 mai 2016 09:46:07
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include <bits/stdc++.h>
#define pp(x) cout << #x << " = " << x << '\n'
using namespace std;

int n,m,valmax[400005],c,a,b,maxim;

void Update(int val, int pos, int nod, int l, int r){
    if(l==r){
        valmax[nod]=val;
        return;
    }
    int mid=(l+r)/2;
    if(pos<=mid) Update(val,pos,2*nod,l,mid);
    else Update(val,pos,2*nod+1,mid+1,r);
    valmax[nod]=max(valmax[2*nod],valmax[2*nod+1]);
}

void Query(int s, int e, int nod, int l, int r){
    if(s<=l && r<=e){
        if(maxim<valmax[nod]) maxim=valmax[nod];
        return;
    }
    int mid=(l+r)/2;
    if(s<=mid) Query(s,e,2*nod,l,mid);
    if(mid<e) Query(s,e,2*nod+1,mid+1,r);
}

int main()
{
    ifstream in("arbint.in");
    ofstream out("arbint.out");
    in >> n >> m;
    for(int i=1;i<=n;i++){
        in >> c;
        Update(c,i,1,1,n);
    }
    for(int i=1;i<=m;i++){
        in >> c >> a >> b;
        if(c==1) Update(b,a,1,1,n);
        else maxim=-1, Query(a,b,1,1,n), out << maxim << '\n';
    }
}