Cod sursa(job #2954005)

Utilizator PieleVoinescu David Piele Data 12 decembrie 2022 22:52:57
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.15 kb
#include <iostream>
#include <fstream>
#include <bits/stdc++.h>
#define nmax 100000

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

int arb[4*nmax];
int n,m;
int x,st,dr;

void update(int nod,int st,int dr,int pos,int val)
{
    if(st==dr){
        arb[nod]=val;
    return;}

    int mid=(st+dr)/2;
    if(pos<=mid)
    {
        update(nod*2,st,mid,pos,val);
    }
    else
    {
        update(nod*2+1,mid+1,dr,pos,val);
    }
    arb[nod]=max(arb[nod*2],arb[nod*2+1]);
}

int query(int nod,int st,int dr,int ST,int DR)
{
    if(st>=ST && dr<=DR)
     return arb[nod];

    int mid=(st+dr)/2;
    int MAX=0;
    if(ST<=mid)
        MAX=max(MAX,query(2*nod,st,mid,ST,DR));
    if(DR>mid)
        MAX=max(MAX,query(2*nod+1,mid+1,dr,ST,DR));
    return MAX;
}

void citire()
{
    fin>>n>>m;
    for(int i=1;i<=n;++i)
    {
        fin>>x;
        update(1,1,n,i,x);
    }
    for(int i=1;i<=m;++i)
    {
        fin>>x>>st>>dr;
        if(x==0)
        fout<<query(1,1,n,st,dr)<<'\n';
        else
        update(1,1,n,st,dr);
    }
}

int main()
{citire();

    return 0;
}