Cod sursa(job #2359323)

Utilizator greelioGreenio Greely greelio Data 28 februarie 2019 19:38:01
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.98 kb
#include<bits/stdc++.h>
#define N 100010
#define L (nod<<1)
#define R L|1

using namespace std;

int h[4*N], val,n,m,l,r,idx;

void update(int st, int dr, int nod) {
    if (st==dr) {
        h[nod]=val;
        return;
    }
    int mid=(st+dr)>>1;
    if (idx<=mid) update(st, mid,L);
    else update(mid+1,dr,R);
    h[nod]=max(h[L], h[R]);
}

int query(int st, int dr, int nod) {
    if (l<=st && dr<=r) return h[nod];
    int mid=(st+dr)>>1;
    int left=0, right=0;
    if (l<=mid) left=query(st, mid,L);
    if (r>mid) right=query(mid+1,dr,R);
    return max(left, right);
}

int main() {
    ifstream cin("arbint.in");
    ofstream cout("arbint.out");
    cin>>n>>m;
    for (int i=1; i<=n; ++i) {
        cin>>val; idx=i;
        update(1,n,1);
    }
    while (m--) {
        int c; cin>>c>>l>>r;
        if (!c) cout<<query(1,n,1)<<'\n';
        else {
            idx=l; val=r;
            update(1,n,1);
        }
    }


    return 0;
}