Cod sursa(job #2205019)

Utilizator vladboss2323Ciorica Vlad vladboss2323 Data 17 mai 2018 18:01:36
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.34 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 p, int a, int b, int poz, int val)
{
    if (a == b)
    {
        t[p] = val;
        return;
    }
    int m = (a + b) / 2;
    if (poz <= m)
    {
        modific(2 * p, a, m, poz, val);
    }
    else
    {
        modific(2 * p + 1, m + 1, b, poz, val);
    }
    t[p] = max(t[2*p], t[2*p+1]);
}

int interogare(int p, int a, int b, int st, int dr)
{
    if (st <= a && b <= dr)
    {
        return t[p];
    }
    int m = (a + b) / 2, m1, m2;
    if (st <= m)
    {
        m1 = interogare(2*p, a, m, st, dr);
    }
    else
    {
        m1 = -INF;
    }
    if (dr > m)
    {
        m2 = interogare(2*p+1, m + 1, b, st, dr);
    }
    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<=m; i++)
    {
        in>>tip>>x>>y;
        if(tip==0)
        {
            out<<interogare(1,1,n,x,y)<<'\n';
        }
        else
            modific(1,1,n,x,y);

    }
    //for(i=1; i<=n; i++)
       // out<<t[i]<<" ";
    return 0;
}