Cod sursa(job #2739140)

Utilizator sandifx68Fazakas Alexandru sandifx68 Data 6 aprilie 2021 22:23:18
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.01 kb
#include <iostream>
#include <fstream>
#define max(a,b) a>b?a:b

//FILE *f=fopen("liceu.in","r");
//FILE *g=fopen("liceu.out","w");

std::ifstream f("arbint.in");
std::ofstream g("arbint.out");

int a[300000];

void upd(int nod,int li,int lf,int &ind,int &val){
    if(li==lf)
        a[nod]=val;
    else{
        int mij=(li+lf)/2;
        if(ind<=mij)upd(2*nod,li,mij,ind,val);
        else    upd(2*nod+1,mij+1,lf,ind,val);
        a[nod]=max(a[2*nod],a[2*nod+1]);
    }
}


int vmax(int nod,int li,int lf,int &s,int &d)
{
    if(s<=li&&lf<=d)return a[nod];
    int m=(li+lf)/2;
    int v1=0,v2=0;
    if(s<=m)v1=vmax(2*nod,li,m,s,d);
    if(d>m)v2=vmax(2*nod+1,m+1,lf,s,d);
    return max(v1,v2);
}

int main()
{
    int x,ind,val,op,n,m;
    f>>n>>m;
    for(int i=1;i<=n;i++){
        f>>x;
        upd(1,1,n,i,x);
    }
    for(int i=1;i<=m;i++){
        f>>op>>ind>>val;
        if(op==1)
            upd(1,1,n,ind,val);
        else g<<vmax(1,1,n,ind,val)<<"\n";
    }
}