Cod sursa(job #3227791)

Utilizator andreea678Rusu Andreea andreea678 Data 2 mai 2024 17:37:09
Problema Arbori de intervale Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.26 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream fin("arbint.in");
ofstream fout("arbint.out");
int arb[400000];
int x, a, b, n, m;
int maxim;
void update(int poz, int val, int nod, int left, int right){
    if (left==right){
        arb[nod]=val;
        return;
    }
    int mij=(left+right)/2;
    if (poz<=mij){
        update(poz,val,2*nod,left,mij);
    }
    else{
        update(poz,val,2*nod+1,mij+1,right);
    }
    arb[nod]=max(arb[2*nod],arb[2*nod+1]);
}
void query(int qleft, int qright, int nod, int left, int right){
    if (qleft<=left && qright>=right){
        if (maxim<arb[nod]){
            maxim=arb[nod];
            return;
        }
    }
    int mij=(left+right)/2;
    if (qleft<=mij){
        query(qleft,qright,nod*2,left,mij);
    }
    else{
        query(qleft,qright,nod*2+1,mij+1,right);
    }
}
int main()
{

    fin >> n >> m;
    for (int i=1; i<=n; ++i){
        fin >> x;
        update(i,x,1,1,n);
    }
    for (int i=1; i<=m; ++i){
        fin >> x >> a >> b;
        if (x==0){
            maxim=-1;
            query(a,b,1,1,n);
            fout << maxim << '\n';
        }
        else if (x==1){
            update(a,b,1,1,n);
        }
    }
    return 0;
}