Cod sursa(job #1043932)

Utilizator SorinaSmeureanuSorina Smeureanu SorinaSmeureanu Data 29 noiembrie 2013 01:13:06
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.24 kb
#include<iostream>
#include<fstream>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
long arb[500001];
int cs, cd, n, m, maxi, pos, val;
void create(int poz, int st, int dr)
{
    int mijloc;
    if(st==dr)
    {
        arb[poz]=val;
        return;
    }
    mijloc=(st+dr)/2;
    if(pos<=mijloc)
        create(poz*2, st, mijloc);
    else
        create(poz*2+1, mijloc+1, dr);
    arb[poz]=max(arb[2*poz], arb[2*poz+1]);
}
int query(int poz, int st, int dr)
{
    int mijloc;
    if(cs<=st && cd>=dr)
        {
            if(maxi<arb[poz])
                maxi=arb[poz];
        }
    else
    {
        mijloc=(st+dr)/2;
        if(cs<=mijloc)
            query(2*poz, st, mijloc);
        if(cd>mijloc)
            query(2*poz+1, mijloc+1, dr);
    }
}
int main()
{
    int i, x;
    f>>n;
    f>>m;
    for(pos=1;pos<=n;pos++)
    {
        f>>val;
        create(1, 1, n);
    }
    for(i=1;i<=m;i++)
    {
        f>>x>>cs>>cd;
        if(x==1)
        {
            pos=cs;
            val=cd;
            create(1,1, n);
        }
        else
        {
            maxi=-1;
            query(1, 1, n);
            g<<maxi;
            g<<"\n";
        }
    }
}