Cod sursa(job #2864738)

Utilizator RamanujanNeacsu Mihnea Ramanujan Data 8 martie 2022 10:28:08
Problema Arbori de intervale Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.03 kb
#include <fstream>
#define MAXN 20000
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int start;
int a[4*MAXN];
void update(int newValue, int x){
    a[x]=newValue;
    while(x!=1){
        x/=2;
        a[x]=max(a[2*x], a[2*x+1]);
    }
}
int query(int lo, int hi){
    int leftValue=0, rightValue=0;
    if(lo>hi)
        return 0;
    if(lo==hi)
        return a[lo];
    if(lo%2==1){
        leftValue=a[lo];
        lo++;
    }
    if(hi%2==0){
        rightValue=a[hi];
        hi--;
    }
    lo/=2, hi/=2;
    return max(max(leftValue, rightValue), query(lo, hi));
}
int main()
{
    int n, q; fin>>n>>q;
    start=1;
    while(start<n) start<<=1;
    for(int i=start; i<start+n; i++){
        fin>>a[i];
        update(a[i], i);
    }
    for(int i=0; i<q; i++){
        int op, x, y; fin>>op>>x>>y;
        if(op==0){
            fout<<query(x+start-1, y+start-1)<<'\n';
        }
        else{
            update(y, x+start-1);
        }
    }
    return 0;
}