Cod sursa(job #2755157)

Utilizator RoberttoPopescu Paullo Robertto Karloss Robertto Data 26 mai 2021 20:26:53
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.34 kb
#include <iostream>
#include<bits/stdc++.h>

using namespace std;

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

#define N_max 1000001
long long MaxArb[4*N_max];
int start,finish;
void Update(int nod, int left, int right,int pos,long long 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]);
}



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

int main()
{
    int n,m;
    fin>>n>>m;
    long long x;
    for(int i=1;i<=n;i++)
    {
        fin>>x;
        Update(1,1,n,i,x);
    }
    int com;
    long long 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;
}