Cod sursa(job #2493119)

Utilizator ioanavasi16Vasile Ioana ioanavasi16 Data 15 noiembrie 2019 23:41:39
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.12 kb
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
long long N,M,v[600005],val;

void actualizare(int nod,int l,int r,int pos,int val)
{
    if(l==r) v[nod]=val;
    else
    {
        int mij=(l+r)/2;
        if(pos<=mij)
            actualizare(2*nod,l,mij,pos,val);
        else
            actualizare(2*nod+1,mij+1,r,pos,val);
        v[nod]=max(v[2*nod],v[2*nod+1]);
    }

}
int maxim(int nod,int l,int r,int x,int y)
{
    int mij,a=0,b=0;
    if(x<=l&&r<=y)
        return v[nod];
    else
    {
        mij=(l+r)/2;
        if(x<=mij) a=maxim(2*nod,l,mij,x,y);
        if(y>=mij+1) b=maxim(2*nod+1,mij+1,r,x,y);
        return max(a,b);
    }
}

int main()
{
    fin>>N>>M;
    for(int i=1; i<=N; i++)
    {
        fin>>val;
        actualizare(1,1,N,i,val);
    }
    int cer,x,y;
    for(int i=1; i<=M; i++)
    {
        fin>>cer>>x>>y;
        if(cer==1)
            actualizare(1,1,N,x,y);
        else
            fout<<maxim(1,1,N,x,y)<<"\n";

    }
    fin.close();
    fout.close();
    return 0;
}