Cod sursa(job #1932178)

Utilizator tifui.alexandruTifui Ioan Alexandru tifui.alexandru Data 19 martie 2017 16:14:19
Problema Arbori de intervale Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int a[444444];
int val,poz,start,stop;
void update(int nod, int p, int q)
{
    if(p==q)
    {
        a[nod]=val;
    }
    else
    {
        int m=(p+q)/2;
        if(poz<=m) update(2*nod,p,m);
        else update(2*nod+1,m+1,q);
        a[nod]=max(a[2*nod],a[2*nod+1]);
    }
}
int query(int nod, int p, int q)
{
    if(start<=p and q<=stop)
    {
        return a[nod];
    }
    else
    {
        int m1=-1,m2=-1;
        int m=(p+q)/2;
        if(start<=m) m1=query(2*nod,p,m);
        if(m<start) m2=query(2*nod+1,m+1,q);
        return max(m1,m2);
    }
}
int main()
{int n,m,i,x,op,y;
f>>n>>m;
for(i=1;i<=n;i++)
{
    f>>x;
    poz=i;
    val=x;
    update(1,1,n);
}
for(i=1;i<=m;i++)
{
    f>>op>>x>>y;
    if(op==0)
    {
        start=x;
        stop=y;
        g<<query(1,1,n)<<'\n';
    }
    else
    {
        poz=x;
        val=y;
        update(1,1,n);
    }
}

    return 0;
}