Cod sursa(job #2875804)

Utilizator vladboss2323Ciorica Vlad vladboss2323 Data 22 martie 2022 13:04:12
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.52 kb
#include <iostream>
#include <fstream>
using namespace std;

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

const int N=100005;
const int INF=999999999;

int n,m,t[N*4];

void modific(int currentPos, int left, int right, int pos, int value)
{
    if(left == right)
    {
        t[currentPos] = value;
        return;
    }
    int m = (left + right) / 2;
    if(pos <= m)
    {
        modific(currentPos * 2, left, m, pos, value);
    }
    else
    {
        modific(currentPos * 2 + 1, m + 1, right, pos, value);
    }
    t[currentPos] = max(t[currentPos * 2],t[currentPos * 2 + 1]);
}


int interogare(int currentPos, int left, int right, int leftQuery, int rightQuery)
{
    if(left >= leftQuery && right <= rightQuery)
    {
        return t[currentPos];
    }
    int m = (left + right) / 2,m1,m2;
    if(leftQuery <= m)
        m1 = interogare(currentPos * 2, left, m, leftQuery, rightQuery);
    else
        m1 = -INF;
    if(rightQuery > m)
        m2 = interogare(currentPos * 2 + 1, m + 1, right, leftQuery, rightQuery);
    else
        m2 = -INF;
    return max(m1,m2);

}

int main()
{
    int i,x,y,tip,j;
    in>>n>>m;
    for(i=1; i<=n; i++)
    {
        in>>x;
        modific(1,1,n,i,x);
    }
    /*for(i=1; i<=2*n; i++)
        out<<t[i]<<" ";*/
    for(i=1; i<=m; i++)
    {
        in>>tip>>x>>y;
        if(tip==0)
        {
            out<<interogare(1,1,n,x,y)<<'\n';
        }
        else
            modific(1,1,n,x,y);

    }
    return 0;
}