Cod sursa(job #2753913)

Utilizator Virgil993Virgil Turcu Virgil993 Data 24 mai 2021 18:26:52
Problema Arbori de intervale Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.37 kb
#include <iostream>
#include<bits/stdc++.h>

using namespace std;

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

int MaxArb[200000];
int start,finish;
void Update(int nod, int left, int right,int pos,int val)
{
    if ( left == right )
    {
        MaxArb[nod] = val;
        return;
    }
    int mijloc = (left+right)/2;
    if ( pos <= mijloc )
        Update(2*nod,left,mijloc,pos,val);
    else
        Update(2*nod+1,mijloc+1,right,pos,val);
    MaxArb[nod] = max(MaxArb[2*nod], MaxArb[2*nod+1]);
}



int Query_max(int nod, int left, int right)
{
    if ( start <= left && right <= finish )
    {
            return MaxArb[nod];
    }
    int mijloc = (left+right)/2;
    int max1=-1,max2=-1;
    if ( start <= mijloc )
        max1 = Query_max(2*nod,left,mijloc);
    if ( mijloc < finish )
       max2 = Query_max(2*nod+1,mijloc+1,right);
    return max(max1,max2);
}

int main()
{
    int n,m;
    fin>>n>>m;
    int x;
    for(int i=1;i<=n;i++)
    {
        fin>>x;
        Update(1,1,n,i,x);
    }
    int com;
    int y;
    for(int i=0;i<m;i++)
    {
        fin>>com;

        if(com == 0)
        {
            fin>>start>>finish;
            fout<<Query_max(1,1,n)<<"\n";
        }
        else
        {
                fin>>x>>y;
                Update(1,1,n,x,y);
        }
    }
    return 0;
}