Cod sursa(job #2124705)

Utilizator filip.mihalutMihalut Filip filip.mihalut Data 7 februarie 2018 15:07:32
Problema Arbori de intervale Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.24 kb
#include <iostream>
#include <fstream>
#define dim 100000

using namespace std;

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

int v[dim*4 + 50] , st , dr, n,m,i,caz , maxim , x , a,b;

inline void update(int st,int dr,int poz,int val,int nod)
{
    if(st == dr)
        {
            v[nod] = val;
            return;
        }
    int m = (st + dr)/2;

    if(m >= poz)
        update(st,m,poz,val,nod*2);
    else
        update(m + 1,dr,poz,val,nod*2 + 1);

    v[nod] = max(v[nod*2], v[nod*2 + 1]);
}

void query(int st,int dr,int a,int b,int nod)
{

    if(st >= a && dr <= b)
    {
        maxim = max(maxim, v[nod]);
        return;
    }

    int m = (st + dr) / 2;

    if(m >= a) query(st,m,a,b,nod*2);
    else if(b > m) query(m + 1,dr,a,b,nod*2 + 1);
}

int main()
{
    f >> n >> m;

    for(i = 1;i <= n;i++)
    {
        f >> x;
        update(1,n,i,x,1);
    }

    for(i = 1;i <= m;i++)
    {
        f >> caz >> a >> b;

        switch(caz)
        {
        case 1:
            update(1,n,a,b,1);
            break;
        default:
            maxim = 0;
            query(1,n,a,b,1);
            g << maxim << '\n';
            break;
        }
    }
    return 0;
}