Cod sursa(job #1074860)

Utilizator dan.ghitaDan Ghita dan.ghita Data 8 ianuarie 2014 00:45:14
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int aint[1000006], n, t, m, x, mx, mid, a, b;

void update(int p, int st, int dr)
{
    if(st==dr)
        aint[p]=b;
    else
    {
        int mid=(st+dr)/2;
        if(a<=mid) update(p*2, st, mid);
        else update(p*2+1, mid+1, dr);
        aint[p]=max(aint[p*2], aint[p*2+1]);
    }
}

void query(int p, int st, int dr)
{

    if(a<=st && dr<=b)
        mx=max(mx, aint[p]);
    else
    {
        int mid=(st+dr)/2;
        if(a<=mid) query(2*p, st, mid);
        if(mid<b) query(2*p+1, mid+1, dr);
    }
}

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