Cod sursa(job #1687450)

Utilizator alex.vasiuVasiu Alexandru alex.vasiu Data 12 aprilie 2016 21:14:33
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.77 kb
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int i,j,q,a,b,n,m,t=1,A[500000];

int query(int p,int l,int r)
{
    if (l>=a && b>=r)
        return A[p];
    if (l>b||a>r)
       return 0;
    return max(query(p*2,l,(l+r)/2),query((p*2)+1,(l+r)/2+1,r));
}

int main()
{
    f>>n>>m;
    while(t<n)
        t*=2;

    for (i=t; i<n+t; ++i)
        f>>A[i];

    for(i=t-1; i>0; i--)
    A[i]=max(A[i*2],A[(i*2)+1]);

    while(m--)
    {
        f>>q>>a>>b;
        if (q)
        {
            a+=t-1,A[a]=b;
            while(a)
                a/=2,A[a]=max(A[a*2],A[(a*2)+1]);
        }
        else
            g<<query(1,1,t)<<"\n";
    }

    return 0;
}