Cod sursa(job #1278064)

Utilizator tibi9876Marin Tiberiu tibi9876 Data 28 noiembrie 2014 14:23:13
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include <fstream>

using namespace std;

int a[300005],i,x,y,p,n,m;

int query(int x,int y,int n,int p,int q)
{
    if ((x<=p) && (q<=y))
    {
        return a[n];
    }
    else
    {
        int m=(p+q)/2;
        int l=0;
        if (m>=x)
            l=query(x,y,2*n,p,m);
        if (m+1<=y)
            l=max(query(x,y,2*n+1,m+1,q),l);
        return l;
    }
}

void update(int x,int v,int n,int p,int q)
{
    if ((p==x) && (q==x))
    {
        a[n]=v;
    }
    else
    {
        int m=(p+q)/2;
        if (m>=x)
            update(x,v,2*n,p,m);
        if (m+1<=x)
            update(x,v,2*n+1,m+1,q);
        a[n]=max(a[2*n],a[2*n+1]);
    }
}

int main()
{
    ifstream f("arbint.in");
    ofstream g("arbint.out");
    f >> n >> m;
    for (i=1;i<=n;i++)
    {
        f >> x;
        update(i,x,1,1,n);
    }
    for (i=1;i<=m;i++)
    {
        f >> p >> x >> y;
        if (p==0)
            g << query(x,y,1,1,n) << "\n";
        else update(x,y,1,1,n);
    }
}