Cod sursa(job #2988483)

Utilizator AndreidreiGresoiu Liviu-Andrei Andreidrei Data 4 martie 2023 18:51:28
Problema Arbori de intervale Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.93 kb
#include <bits/stdc++.h>
#pragma GCC optimize ("O3")
#define din cin
#define dout out
#define pi 3.14159265359
#define sw(x,y) x^=y,y^=x,x^=y
#define bmin(a,b)((a<b)?(a):(b))
#define bmax(a,b)((a>b)?(a):(b))
#define bminify(a,b)a=bmin(a,b)
#define bmaxify(a,b)a=bmax(a,b)
#define forq(i,ii,n)for(i=ii;i<n;i++)
using namespace std;
typedef long long ll;
ifstream in("arbint.in");
ofstream out("arbint.out");
int n,m,a[1<<18],i,j,x,y,z;
int main()
{
in>>n>>m;
for(i=1;i<=n;i++)in>>a[(1<<17)+i];
for(i=(1<<17)-1;i;i--)a[i]=bmax(a[i*2],a[i*2+1]);
while(m--)
{
    in>>z>>x>>y;
    if(z==1)
    {
        x+=1<<17,a[x]=y,x/=2;
        while(x)a[x]=bmax(a[x*2],a[x*2+1]),x/=2;
    }
    else{
        x+=1<<17,y+=1<<17,z=bmax(a[x],a[y]);
        while((x^y)>1)
        {
            if(y&1)bmaxify(z,a[y^1]);
            if(x&1==0)bmaxify(z,a[x^1]);
            x/=2,y/=2;
        }
        out<<z<<'\n';
    }
}
}