Cod sursa(job #2906389)

Utilizator Savu_Stefan_CatalinSavu Stefan Catalin Savu_Stefan_Catalin Data 25 mai 2022 22:49:33
Problema Arbori de intervale Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.81 kb
#include <fstream>
using namespace std;
ifstream in("arbint.in");
ofstream out("arbint.out");
int n,m,x,aib[200005],i,a,b,cer;
int ma(int a,int b)
{
    if (a>b) return a;
    return b;
}
void upd(int x,int val)
{
    aib[x+n]=val;
    for (int i=x+n;i>1;i/=2) aib[i>>2]=max(aib[i],aib[i^1]);
}
int query(int a,int b)
{
    int ras=0;
    for (a+=n,b+=n;a<b;a>>=1,b>>=1)
    {
        if (a&1) ras=ma(ras,aib[a++]);
        if (b&1) ras=ma(ras,aib[--b]);
    }
    return ras;
}
int main()
{
    in>>n>>m;
    for (i=0;i<n;++i)
    {
        in>>x;
        aib[i+n]=x;
    }
    for (i=n-1;i>0;--i) aib[i]=ma(aib[i*2],aib[i*2+1]);
    for (i=0;i<m;++i)
    {
        in>>cer>>a>>b;
        a--;
        if (cer==1) upd(a,b);
        else out<<query(a,b)<<'\n';
    }
    return 0;
}