Cod sursa(job #2106080)

Utilizator DenisONIcBanu Denis Andrei DenisONIc Data 14 ianuarie 2018 22:03:03
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.82 kb
#include <bits/stdc++.h>
#define Nmax 100001
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int n,N,v[3*Nmax],q,t,a,b;

void create(){
    for (int i=N-1;i>=1;i--)
        v[i] = max(v[i*2+1],v[i*2]);
}

void update(int pos,int val){
    for (pos += N-1,v[pos] = val; pos>1; pos/=2)
        v[pos/2] = max(v[pos],v[pos^1]);
}

int query(int st,int dr){
    int res = 0;
    for (st += N-1,dr += N;st<dr;st/=2,dr/=2){
        if (st&1) res = max(res,v[st++]);
        if (dr&1) res = max(res,v[--dr]);
    }
    return res;
}

int main()
{
    f>>n>>q;

    N = 1;
    while (N<n) N*=2;
    for (int i=1;i<=n;i++)
        f>>v[i+N-1];
    create();

    while (q--){
        f>>t>>a>>b;
        if (t==1) update(a,b);
        else g<<query(a,b)<<'\n';
    }
    return 0;
}