Cod sursa(job #2367099)

Utilizator CodCatalinCodreanu Catalin CodCatalin Data 5 martie 2019 08:33:15
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.98 kb
#include <fstream>
using namespace std;

ifstream f("arbint.in");
ofstream g("arbint.out");

int n,m,x,v[500000],c,a,b,Max,poz;
void Update(int nod,int st,int dr)
{
    if(st==dr)
    {
        v[nod]=x;
        return;
    }
    int div=(st+dr)/2;
    if(div>=poz)Update(nod*2,st,div);
    else Update(nod*2+1,div+1,dr);
    v[nod]=max(v[nod*2],v[nod*2+1]);
}
void Query(int nod,int st,int dr)
{
    if(st>=a&&dr<=b)
    {
        if(Max<v[nod])Max=v[nod];
        return;
    }
    int div=(st+dr)/2;
    if(div>=a)Query(nod*2,st,div);
    if(div<b)Query(nod*2+1,div+1,dr);
}
int main()
{
    f>>n>>m;
    for(int i=1;i<=n;++i)
    {
        f>>x;poz=i;
        Update(1,1,n);
    }
    for(int i=1;i<=m;++i)
    {
        f>>c>>a>>b;
        if(c)
        {
            poz=a;x=b;
            Update(1,1,n);
        }
        else
        {
            Max=0;
            Query(1,1,n);
            g<<Max<<'\n';
        }
    }
    return 0;
}