Cod sursa(job #1315730)

Utilizator alinmocanu95FMI Alin Mocanu alinmocanu95 Data 13 ianuarie 2015 00:57:14
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.2 kb
#include <iostream>
#include <fstream>
#define mx 300010
using namespace std;
long n,a,b,op,i,m,s,w[mx];

long max(long a, long b)
{
    long m;
    m=a;
    if (m<b) m=b;
    return m;
}

void compar(long nod)
{
    if (w[nod]>s) s=w[nod];
}

void adaug(long nod, long p, long u, long poz, long val)
{
    long m;
    if (p==u) w[nod]=val;
    else
    {
        m=(p+u)/2;
        if (poz<=m) adaug(2*nod,p,m,poz,val);
        if (m<poz) adaug(2*nod+1,m+1,u,poz,val);
        w[nod]=max(w[2*nod],w[2*nod+1]);
    }
}

void query(long nod, long p, long u)
{
    long m;
    if (a<=p && u<=b)
    {
        compar(nod); return;
    }
    if (p<u)
    {
        m=(p+u)/2;
        if (a<=m) query(2*nod,p,m);
        if (m<b) query(2*nod+1,m+1,u);
    }
}

int main()
{
    ifstream f("arbint.in");
    ofstream g("arbint.out");
    f>>n>>m;
    for (i=1; i<=n; i++)
    {
        f>>a;
        adaug(1,1,n,i,a);
    }
    for (i=1; i<=m; i++)
    {
        f>>op>>a>>b;
        if (op==1) adaug(1,1,n,a,b);
        else
        {
            s=0;
            query(1,1,n);
            g<<s<<"\n";
        }
    }
    f.close();
    g.close();
    return 0;
}