Cod sursa(job #2374122)

Utilizator Horea_Mihai_SilaghiHorea Mihai Silaghi Horea_Mihai_Silaghi Data 7 martie 2019 17:03:43
Problema Arbori de intervale Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.17 kb
#include <fstream>

using namespace std;
ifstream cin("arbint.in");
ofstream cout("arbint.out");
int n,m,arb[262142],val,poz,valmax,a,b;

void update(int node, int left, int right)
{
    if(left==right)
    {
        arb[node]=val;
        return;
    }
    int div=(left+right)/2;
    if(poz<=div)
        update(2*node,left,div);
    else
        update(2*node+1,div+1,right);
    arb[node]=max(arb[2*node],arb[2*node+1]);
}
void query(int node,int left,int right)
{
    if(a<=left&&right<=b)
    {
        if(arb[node]>valmax)
            valmax=arb[node];
        return;
    }
    int div=(left+right)/2;
    if(a<=div)
        query(node*2,left,div);
    if(div<b)
        query(node*2+1,div+1,right);
}
int main()
{
    int i,j,x;
    cin>>n>>m;
    for(i=1;i<=n;i++)
    {
        cin>>val;
        poz=i;
        update(1,1,n);
    }
    for(i=1;i<=m;i++)
    {
        cin>>x;
        if(x==1)
        {
            cin>>poz>>val;
            update(1,1,n);
        }
        else
        {
            cin>>a>>b;
            valmax=1;
            query(1,1,n);
            cout<<valmax<<'\n';
        }
    }
    return 0;
}