Cod sursa(job #1938763)

Utilizator teo1496Teodor Juravlea teo1496 Data 25 martie 2017 10:44:34
Problema Arbori de intervale Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 kb
#include <fstream>
#include <cmath>
using namespace std;
long long rez=0, q_st=1, q_dr, n, m, i, k, a, b, aint[131072];
void update(long long nod, long long st, long long dr, long long poz, long long val){
    if(st==dr)
        aint[poz]=val;
        int md=(st+dr)/2;
        if(poz<=md)
            update(2*nod, st, md, poz, val);
        else
            update(2*nod+1, md+1, dr, poz, val);
}
int query(long long nod, long long st, long long dr){
    if(q_st<=st && q_dr>=dr){
        if(aint[nod]>rez)
            rez=aint[nod];
    }
    else if(q_dr<st || dr<q_st)
        return 0;
         else{
            int md=(st+dr)/2;
            query(2*nod, st, md);
            query(2*nod+1, md+1, dr);
         }
}
int main(){
    ifstream fin("arbint.in");
    ofstream fout("arbout.out");
    fin >> n >> m;
    q_dr=n;
    for(i=1;i<=n;++i){
        fin >> k;
        update(1, i, i, i, k);
    }
    for(i=1;i<=m;++i){
        fin >> k >> a >> b;
        if(k==0){
            rez=0;
            query(1, a, b);
            fout << rez << "\n";
        }
        else
            update(1, a, a, a, b);
    }
    return 0;
}