Cod sursa(job #1156733)

Utilizator dumytruKana Banana dumytru Data 27 martie 2014 22:25:06
Problema Arbori de intervale Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.27 kb
#include <iostream>
#include <fstream>
#include <vector>
#define nmax 100000

using namespace std;

unsigned n,m,nr,arb[2*nmax+2];

unsigned maxim(unsigned a, unsigned b)
{
    if(a>b)return a;
    return b;
}
void update(unsigned nod, unsigned st, unsigned dr,unsigned pos, unsigned val)
{
    if(st>=pos && dr<=pos)
    {
        arb[nod]=val;
    }
    else
    {
        unsigned mijl=(st+dr)/2;
        if(pos<=mijl)
            update(nod*2,st, mijl, pos, val);
        else
            update(nod*2+1,mijl+1, dr, pos, val);
        arb[nod] = maxim(arb[nod*2],arb[nod*2+1]);
    }
}

unsigned query(unsigned nod, unsigned st, unsigned dr,unsigned a,unsigned b)
{
    if(st>=a && dr<=b)
    {
        return arb[nod];
    }
    else
    {
        unsigned mijl=(st+dr)/2;
        if(a<=mijl)
            query(nod*2,st, mijl, a, b);
        else
            query(nod*2+1,mijl+1, dr, a, b);
    }
}


int main()
{
    unsigned i,t,a,b;
    ifstream f("arbint.in");
    ofstream g("arbint.out");
    f>>n>>m;
    for(i=1;i<=n;i++)
    {
        f>>nr;
        update(1,1,n,i,nr);

    }
    for(i=1;i<=m;i++)
    {
        f>>t>>a>>b;
        if(t==0)g<<query(1,1,n,a,b)<<'\n';
        else update(1,1,n,a,b);
    }
    return 0;
}