Cod sursa(job #1740230)

Utilizator antracodRadu Teodor antracod Data 11 august 2016 11:14:53
Problema Arbori de intervale Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.24 kb
#include <iostream>
#include <fstream>

using namespace std;

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

long long int arb[260001];

const int INF=(1<<30);

void update(int x,int y)
{
    arb[x]=y;
    while(x!=1)
    {
        x=x/2;
        arb[x]=max(arb[x*2],arb[x*2+1]);
    }
}

int query(int ql,int qr,int node,int nl,int nr)
{
    if(nl>=ql && nr<=qr)
    {
        return arb[node];
    }
    else if(nr<ql || nl>qr)
    {
        return -INF;
    }
    else
    {
        int a,b;
        a=query(ql,qr,node*2,nl,(nr+nl)/2);
        b=query(ql,qr,node*2+1,(nr+nl)/2+1,nr);
        return max(a,b);
    }

}
int main()
{
    long long int op,n,n2;
    long long int i;
    in>>n>>op;

    for(n2=1; n2<n; n2*=2)
    {}

    for(i=n2; i<=n2+n-1; i++)
    {
        in>>arb[i];
    }
    for(i=n+n2; i<n2*2; i++)
    {
        arb[i]=-INF;
    }
    for(i=n2-1; i>0; i--)
    {
        arb[i]=max(arb[i*2],arb[i*2+1]);
    }

    for(i=1; i<=op; i++)
    {
        long long int x,y,k;
        in>>k>>x>>y;
        if(k==1)
        {
            update(n2+x-1,y);
        }
        else
        {
            out<<query(x,y,1,1,n2)<<'\n';
        }
    }
    return 0;
}