Cod sursa(job #3041393)

Utilizator alinatomi14Tomita Alina alinatomi14 Data 31 martie 2023 13:47:32
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.84 kb
#include <bits/stdc++.h>
#define L long long
using namespace std;
ifstream in("arbint.in");
ofstream out("arbint.out");
int n,m,x,y,ma,a[500005];
bool k;
void u(int nod, int st, int dr)
{
    if(st==dr)
    {
        a[nod]=y;
        return;
    }
    int m=(st+dr)/2;
    if (x<=m)
        u(2*nod,st,m);
    else
        u(2*nod+1,m+1,dr);
    a[nod]=max(a[2*nod],a[2*nod+1]);
}
void q(int nod, int st, int dr)
{
    if (x<=st && dr<=y)
    {
        ma=max(ma,a[nod]);
        return;
    }
    int m=(st+dr)/2;
    if (x<=m) q(2*nod,st,m);
    if (m<y) q(2*nod+1,m+1,dr);
}
int main()
{
    in>>n>>m;
    for(int i=1; i<=n; ++i)
        in>>y,x=i,u(1,1,n);
    for(int i=1; i<=m; ++i)
    {
        in>>k>>x>>y;
        if(k==0)
            ma=-1,q(1,1,n),out<<ma<<'\n';
        else
            u(1,1,n);
    }
}