Cod sursa(job #2227960)

Utilizator vladsirbu23Vlad Sirbu vladsirbu23 Data 2 august 2018 12:35:37
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.94 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int v[100010],i,n,a,b,maxx,val;
struct nod
{
    int info,x,y;
    nod *st,*dr;
};
void actualizare(nod *r)
{
    int m;
    if(a==r->x&&a==r->y)
    {
        r->info=b;
    }
    else
    {
        m=(r->x+r->y)/2;
        if(a<=m)
            actualizare(r->st);
        else
            actualizare(r->dr);
        r->info=max(r->st->info,r->dr->info);

    }

}
void maxim(nod *r)
{
    int m;
    if(a<=r->x&&b>=r->y)
    {
        maxx=max(maxx,r->info);
    }
    else
    {
        m=(r->x+r->y)/2;
        if(a<=m)
            maxim(r->st);
        if(b>m)
            maxim(r->dr);
    }
}
void calc (nod *r)
{
    if(r->x!=r->y)
    {
        calc(r->st);
        calc(r->dr);
        r->info=max(r->st->info,r->dr->info);
    }
}
void construire(nod *r)
{
    nod *q;
    int m;

    if(r->x!=r->y)
    {
        m=(r->x+r->y)/2;
        q=new nod;
        r->st=q;
        q->x=r->x;
        q->y=m;
        construire(q);
        q=new nod;
        r->dr=q;
        q->x=m+1;
        q->y=r->y;
        construire(q);
    }
    else
    {
        r->info=v[r->x];
        r->st=NULL;
        r->dr=NULL;
    }
}
void afisare(nod *r)
{
    if(r->st!=NULL)
    {
        afisare(r->st);
    }
    fout<<r->x<<" "<<r->y<<" "<<r->info<<'\n';
    if(r->dr!=NULL)
    {
        afisare(r->dr);
    }
}

int main()
{
    int m;
    nod *q,*r;
    fin>>n>>m;
    for(i=1; i<=n; i++)
        fin>>v[i];
    r=new nod;
    r->x=1;
    r->y=n;
    construire(r);
    calc(r);
    //afisare(r);
    for(i=1; i<=m; i++)
    {
        fin>>val;
        fin>>a>>b;
        if(val==0)
        {
            maxx=0;
            maxim(r);
            fout<<maxx<<'\n';
        }
        else
        {
            actualizare(r);
        }
    }
}