Cod sursa(job #2920274)

Utilizator RobertlelRobert Robertlel Data 23 august 2022 13:58:28
Problema Arbori de intervale Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.26 kb
#include <iostream>
#include <fstream>
using namespace std;

ifstream f("arbint.in");
ofstream g("arbint.out");

int v[100005],maxim,x,y,c,i,n,m;

void update(int nod,int left,int right,int poz,int val)
{
    if(left==right)
    {
        v[nod]=val;
        return;
    }


       int mij=(left+right)/2;
       if(poz<=mij)
           update(2*nod,left,mij,poz,val);
       else
           update(2*nod+1,mij+1,right,poz,val);
           v[nod]=max(v[2*nod],v[2*nod+1]);

}

void querry(int nod,int left,int right,int ql,int qr,int &maxim)
{
    if(left>=ql&&right<=qr)
        maxim=max(maxim,v[nod]);
    else
    {
        int mid=(left+right)/2;
        if(ql<=mid)
            querry(2*nod,left,mid,ql,qr,maxim);
            else
        if(qr>=mid)
            querry(2*nod+1,mid+1,right,ql,qr,maxim);
    }

}

int main()
{
    f>>n>>m;
    for(i=1;i<=n;i++)
    {
        f>>x;
        update(1,1,n,i,x);
    }
    for(i=1;i<=m;i++)
    {
        f>>c;
        if(c==1)
        {
            f>>x>>y;
            update(1,1,n,x,y);
        }
        else
        {
            f>>x>>y;
            maxim=-99999;
            querry(1,1,n,x,y,maxim);
            g<<maxim<<'\n';
        }
    }
    return 0;
}