Cod sursa(job #2424423)

Utilizator carolina.porcescuCarolina Porcescu carolina.porcescu Data 22 mai 2019 23:19:18
Problema Arbori de intervale Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.03 kb
#include <bits/stdc++.h> 
using namespace std;
ifstream fin ("arbint.in");
ofstream fout ("arbint.out");

int dp[300005];
int a[100005];
int n,m,x,y,c;
 
void update(int st, int dr, int poz, int niv){
    if(st==dr){
        dp[niv]=a[poz];
        return;
    }
    int mij=(st+dr)/2;
    if(poz>mij)
        update(mij+1,dr,poz,2*niv+1);
    else
        update(st, mij,poz,2*niv);
 
    dp[niv]=max(dp[2*niv], dp[2*niv+1]);
}
 
int caut(int st, int dr, int niv){
    if(x<=st && dr<=y)
        return dp[niv];
    int mij = (st+dr)/2;
    int r1 = -1, r2 = -1;
    if(x<=mij)
        r1=caut(st,mij,2*niv);
    if(mij+1<=y)
        r2=caut(mij+1,dr,2*niv+1);
    return max(r1, r2);
}
 
int main()
{
    fin>>n>>m;
    for(int i=0;i<n;++i){
        fin>>a[i];
        update(0,n-1,i,1);
    }
    for(int i=0;i<m;++i){
        fin>>c>>x>>y;
        if(c==0){
            --x; --y; fout<<caut(0,n-1,1)<<endl;
        }
        else
            a[x-1]=y, update(0,n-1,x-1,1);
    }
    return 0;
}