Cod sursa(job #2875165)

Utilizator FastmateiMatei Mocanu Fastmatei Data 21 martie 2022 10:37:25
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.92 kb
#include <bits/stdc++.h>

using namespace std;

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

int a[400005];
int n,m;

void Update(int x,int y)
{
    a[x]=y;
    x/=2;
    while(x>=1)
    {
        a[x]=max(a[2*x],a[2*x+1]);
        x/=2;
    }
}

int Query(int p,int x,int y,int st,int dr)
{
    if(x==st && y==dr) return a[p];
    int mij=(st+dr)/2;
    if(y<=mij) return Query(p*2,x,y,st,mij);
    if(mij<x) return Query(p*2+1,x,y,mij+1,dr);
    return max(Query(p*2,x,mij,st,mij),Query(p*2+1,mij+1,y,mij+1,dr));
}

int main()
{
    fin>>n>>m;
    int k=1;
    for(k=1;k<n;k*=2)
        ;
    for(int i=k;i<k+n;i++)
        fin>>a[i];
    for(int i=k-1;i>=1;i--)
        a[i]=max(a[2*i],a[2*i+1]);
    n=k;
    for(int i=1;i<=m;i++)
    {
        int op,x,y;
        fin>>op>>x>>y;
        if(op==0) fout<<Query(1,x,y,1,n)<<"\n";
        else Update(n-1+x,y);
    }
    return 0;
}