Cod sursa(job #2701279)

Utilizator bia_bobesBobes Bianca bia_bobes Data 30 ianuarie 2021 11:55:20
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.26 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
const int NMAX=400001;
int n,m,x,arbint[NMAX],sol;
void update(int nod,int beginn,int endd,int a,int b)
{
    if(a<=beginn&&endd<=b)
    {
        arbint[nod]=x;
        return;
    }
    else
    {
        int mij=(beginn+endd)/2;
        if(a<=mij)
            update(2*nod,beginn,mij,a,b);
        if(b>mij)
            update(2*nod+1,mij+1,endd,a,b);
        arbint[nod]=max(arbint[2*nod],arbint[2*nod+1]);
    }
}
void maxim(int nod,int beginn,int endd,int a,int b)
{
    if(a<=beginn&&endd<=b)
    {
        sol=max(arbint[nod],sol);
        return;
    }
    else
    {
        int mij=(beginn+endd)/2;
        if(a<=mij) maxim(2*nod,beginn,mij,a,b);
        if(b>mij) maxim(2*nod+1,mij+1,endd,a,b);
    }
}
void solve()
{
    for(int i=1;i<=m;i++)
    {
        int type,a,b;
        fin>>type>>a>>b;
        x=b;
        if(type==1) update(1,1,n,a,a);
        if(type==0)
        {
            maxim(1,1,n,a,b);
            fout<<sol<<"\n";
        }
        sol=0;
    }
}
int main()
{
    fin>>n>>m;
    for(int i=1;i<=n; i++)
    {
        fin>>x;
        update(1,1,n,i,i);
    }
    solve();
    return 0;
}