Cod sursa(job #2737168)

Utilizator Cojocaru_Andrei_CristianCojocaru Andrei Cristian Cojocaru_Andrei_Cristian Data 4 aprilie 2021 14:48:58
Problema Arbori de intervale Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.2 kb
#include <fstream>
#include <iostream>
#include <algorithm>

using namespace std;

int arb[400005];

void update(int poz,int x)
{
    int y;
    arb[poz]=x;
    while(poz>1)
    {
        y=max(arb[(poz/2)*2],arb[2*(poz/2)+1]);
        if(y<arb[poz/2])
            arb[poz/2]=y;
        else
            return ;
        poz/=2;
    }
}

int querry(int nod, int x,int y,int st,int dr)
{
    if(x==st&&y==dr)
        return arb[nod];
    int mid=(st+dr)/2;
    if(y<=mid)
        return querry(nod*2,x,y,st,mid);
    else
        if(x>mid)
            return querry(nod*2+1,x,y,mid+1,dr);
        else
            return max(querry(nod*2,x,mid,st,mid), querry(nod*2+1,mid+1,y,mid+1,dr));
}

int main()
{
    int tip,x,y,m,n;
    ifstream cin("arbint.in");
    ofstream cout("arbint.out");
    cin>>n>>m;
    int put=1;
    while(put<n)
    {
        put=put*2;
    }
    for(int i=put;i<put+n;i++)
        cin>>arb[i];
    for(int i=put-1;i>0;i--)
        arb[i]=max(arb[i*2],arb[i*2+1]);
    while(m--)
    {
        cin>>tip>>x>>y;
        if(tip==0)
            cout<<querry(1,x,y,1,put)<<"\n";
        else
            update(put+x-1,y);
    }
    return 0;
}