Cod sursa(job #2603672)

Utilizator As932Stanciu Andreea As932 Data 20 aprilie 2020 17:05:32
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.09 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");

const int nmax=100005;

int n,m,arb[5*nmax],op,x,y,poz,val,mx,st,en;

void upd(int nod,int l,int r)
{
    if(l==r)
    {
        arb[nod]=val;
        return;
    }

    int mid=(l+r)/2;
    if(poz<=mid)upd(2*nod,l,mid);
    else upd(2*nod+1,mid+1,r);

    arb[nod]=max(arb[2*nod],arb[2*nod+1]);
}

void ans(int nod,int l,int r)
{
    if(st<=l && r<=en)
    {
        mx=max(mx,arb[nod]);
        return;
    }

    int mid=(l+r)/2;
    if(st<=mid)ans(2*nod,l,mid);
    if(en>mid)ans(2*nod+1,mid+1,r);
}


int main()
{
    fin>>n>>m;

    for(int i=1;i<=n;i++)
    {
        fin>>x;

        val=x,poz=i;

        upd(1,1,n);
    }

    for(int i=1;i<=m;i++)
    {
        fin>>op>>x>>y;

        if(op)
        {
            poz=x,val=y;
            upd(1,1,n);
        }
        else
        {
            mx=-1;
            st=x,en=y;
            ans(1,1,n);

            fout<<mx<<"\n";
        }
    }

    return 0;
}