Cod sursa(job #2228801)

Utilizator MaaaaaCristina Ma Maaaaa Data 4 august 2018 20:47:17
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.2 kb
#include <fstream>
#include <stdint.h>
#define nmax 100001
using namespace std;
fstream f1("arbint.in", ios::in);
fstream f2("arbint.out", ios::out);
int n, m, aint[4*nmax];
void update(int poz, int st, int dr, int p, int val)
{
    if(st==dr) aint[poz]=val;
    else
    {
        int mijl=(st+dr)/2;
        if(p<=mijl) update(poz*2, st, mijl, p, val);
        else update(poz*2+1, mijl+1, dr, p, val);
         aint[poz]=max(aint[poz*2], aint[poz*2+1]);
    }
}
int query(int poz, int st, int dr, int l, int r)
{
    if((l<=st)&&(dr<=r)) return aint[poz];
    else
    {
        int mijl=(st+dr)/2, max1, max2;
        max1=0; max2=0; ////!!!!!!!!!!!!
        if(l<=mijl) max1=query(poz*2, st, mijl, l, r);
        if(mijl+1<=r) max2=query(poz*2+1, mijl+1, dr, l, r);
        return max(max1, max2);
    }
}
int main()
{
    int i, x, tip, aa, b;
    f1>>n>>m;
    for(i=1; i<=n; i++)
        {
            f1>>x;
            update(1, 1, n, i, x);
        }
    for(i=1; i<=m; i++)
    {
        f1>>tip>>aa>>b;
        if(tip==0)
            f2<<query(1, 1, n, aa, b)<<"\n"; ///atentie, valori pozitive !
        else
           update(1, 1, n, aa, b);
    }
    return 0;
}