Cod sursa(job #1920985)

Utilizator Kln1000Ciobanu Bogdan Kln1000 Data 10 martie 2017 10:56:07
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb
#include <iostream>
#include <fstream>

using namespace std;

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

int arb[300010],mx;

void arb_update(int nod,int st,int dr,int pos,int val){
    if (st==dr)
        {arb[nod]=val;return;}
    int mid=(st+dr)>>1;
    if (mid>=pos)
        arb_update(nod<<1,st,mid,pos,val);
    else
        arb_update((nod<<1)+1,mid+1,dr,pos,val);
    arb[nod]=max(arb[nod<<1],arb[(nod<<1)+1]);
}

void arb_query(int nod,int st,int dr,int left,int right){
    if (left<=st and right>=dr)
        {mx=max(mx,arb[nod]);return;}
    int mid=(st+dr)>>1;
    if (left<=mid)
        arb_query(nod<<1,st,mid,left,right);
    if (right>mid)
        arb_query((nod<<1)+1,1+mid,dr,left,right);
}

int main()
{
    int n,m;
    f>>n>>m;
    for (int x,i=1; i<=n; ++i)
    {
        f>>x;
        arb_update(1,1,n,i,x);
    }
    for (int tip,a,b,i=0; i<m; ++i)
    {
        f>>tip>>a>>b;
        if (tip==0)
        {
            mx=0;
            arb_query(1,1,n,a,b);
            t<<mx<<'\n';
        }
        else arb_update(1,1,n,a,b);
    }
    return 0;
}