Cod sursa(job #2122479)

Utilizator alexilasiAlex Ilasi alexilasi Data 5 februarie 2018 10:10:33
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
#include <bits/stdc++.h>

using namespace std;

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

int n,m,i,A,B,C;

int a[200001];

void build()
{
    for(i=n-1;i>0;i--)
        a[i]=max(a[i<<1],a[i<<1|1]);
}

void update(int p,int x)
{
    a[n+p-1]=x;
    for(int i=(n+p-1)/2;i>0;i>>=1)
    {
        a[i]=max(a[i<<1],a[i<<1|1]);
    }
}

int query(int l,int r)
{
    int ans=0;
    l+=n-1;
    r+=n;
    for(;l<r;l>>=1,r>>=1)
    {
        if(l&1)
            ans=max(ans,a[l++]);
        if(r&1)
            ans=max(ans,a[--r]);
    }
    return ans;
}

int main()
{
    fin>>n>>m;
    for(i=1;i<=n;i++)
        fin>>a[n+i-1];
    build();
    for(i=1;i<=m;i++)
    {
        fin>>C>>A>>B;
        if(C==1)update(A,B);
        if(C==0)
        {
            fout<<query(A,B)<<'\n';
        }
    }
    return 0;
}