Cod sursa(job #1947685)

Utilizator EdythestarGhiriti Edmond Edythestar Data 31 martie 2017 10:22:00
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

ifstream fin("arbint.in");
ofstream fout("arbint.out");

vector<int> fa(525000);

int poz,n,m,i,x,koz,k,a,b;

void act(int csp,int bal,int jobb)
{
    if(bal>=poz && jobb<=poz)
    {
        fa[csp]=x;
        return;
    }
    koz=(bal+jobb)>>1;
    if(poz<=koz) act(csp<<1,bal,koz);
    else act((csp<<1)+1,koz+1,jobb);
    fa[csp]=max(fa[csp<<1],fa[(csp<<1)+1]);
}

int inter(int csp,int bal,int jobb)
{
    if(bal>=a && jobb<=b)
    {
        return fa[csp];
    }
    int x1=0,x2=0;
    int koz=(bal+jobb)>>1;

    if(a<=koz) x1=inter(csp<<1,bal,koz);
    if(b>koz) x2=inter((csp<<1)+1,koz+1,jobb);
    return max(x1,x2);
}

int main()
{
    fin>>n>>m;

    for(i=1;i<=n;i++)
    {
        fin>>x;
        poz=i;
        act(1,1,n);
    }

    for(i=1;i<=m;i++)
    {
        fin>>k>>a>>b;

        if(k==1)
        {
            poz=a;
            x=b;
            act(1,1,n);
        }
        else
        {
            fout<<inter(1,1,n)<<"\n";
        }
    }

}