Cod sursa(job #1074857)

Utilizator dan.ghitaDan Ghita dan.ghita Data 8 ianuarie 2014 00:35:11
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 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==1) update(1, 1, n);
        else mx=0, query(1, 1, n), g<<mx<<'\n';


    }




    return 0;
}