Cod sursa(job #2632015)

Utilizator Ionut_neuer58Raducu Ioan Stefan Ionut_neuer58 Data 1 iulie 2020 21:36:01
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.16 kb
#include <iostream>
#include <fstream>
#include <cmath>

using namespace std;

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

int m, n, pos, val, cer, maxim, start, fin;
int v[400000];

void update(int nod, int st, int dr)
{
    if(st==dr)
    {
        v[nod]=val;
        return;
    }
    int med=(st+dr)/2;
    if(pos<=med) update(2*nod, st, med);
    else update(2*nod+1, med+1, dr);
    v[nod]=max(v[2*nod], v[2*nod+1]);
}

void query(int nod, int st, int dr)
{
    if(st>=start && dr<=fin)
    {
        maxim=max(maxim, v[nod]);
        return;
    }
    int med=(st+dr)/2;
    if(start<=med) query(2*nod, st, med);
    if(med<fin) query(2*nod+1, med+1, dr);
}

void readit()
{
    in>>n>>m;
    for(int i=1; i<=n; i++)
    {
        in>>val;
        pos=i;
        update(1, 1, n);
    }
    while(m--)
    {
        in>>cer>>start>>fin;
        if(cer==0)
        {
            maxim=-1;
            query(1, 1, n);
            out<<maxim<<'\n';
        }
        else
        {
            pos=start, val=fin;
            update(1, 1, n);
        }
    }
}

int main()
{
    readit();

    return 0;
}