Cod sursa(job #3281543)

Utilizator AndreidreiGresoiu Liviu-Andrei Andreidrei Data 2 martie 2025 11:37:30
Problema Arbori de intervale Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 2.13 kb
#include <bits/stdc++.h>
#include <cstring>
#include <cstdio>
#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 fto(i,ii,n)for(i=ii;i<n;i++)
#define f first
#define s second
//#define mod 2000003ll
#define nmax 200006
#define lim 351
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
//typedef tree<int,null_type,rb_tree_tag,tree_order_statistics_node_update>ordered_set;
//functions: x.find_by_order(k), x.order_of_key(t)
using namespace std;
typedef long long ll;
ifstream in("arbint.in");
ofstream out("arbint.out");
//FILE *fin=fopen("infasuratoare.in","r");
//FILE *fout=fopen("infasuratoare.out","w");
int n,x[1<<17],i,j,k,l,s,m,t,u,v;
template<typename T,int n>
struct aib{T v,z;aib<T,n-1>a,b;};
template<typename T>
struct aib<T,0>{T v=0,z;};
template<typename T,typename Y,int n>
void aib_set(aib<T,n>&a,Y *b)
{
    a.a.z=a.z,a.b.z=a.z+(1<<(n-1));
    aib_set(a.a,b),aib_set(a.b,b+(1<<(n-1)));
    a.v=bmax(a.a.v,a.b.v);
    //cout<<n<<' '<<a.v<<' '<<a.z<<'\n';
}
template<typename T,typename Y>
void aib_set(aib<T,0>&a,Y *b)
{
    a.v=*b;//cout<<0<<' '<<a.v<<'\n';
}
template<typename T,int n>
void aib_q(aib<T,n>&a)
{
    if(a.z<v&&a.z+(1<<n)>u)
    {
        //cout<<u<<' '<<v<<"  "<<n<<' '<<a.z<<' '<<a.v<<'\n';
        if(a.z>=u&&a.z+(1<<n)<=v)
            bmaxify(s,a.v);
            else aib_q(a.a),aib_q(a.b);
    }
}
template<typename T>
void aib_q(aib<T,0>&a)
{
    if(a.z>=u&&a.z+1<=v)
        bmaxify(s,a.v);
}
template<typename T,int n>
void upd(aib<T,n>&a)
{
    if(u<a.z+(1<<(n-1)))
        upd(a.a),a.v=bmax(a.b.v,v);
        else upd(a.b),a.v=bmax(a.a.v,v);
}
template<typename T>
void upd(aib<T,0>&a)
{
    a.v=v;
}
aib<int,17>b;
int main()
{
in>>n>>m;
fto(i,0,n)in>>x[i];
aib_set(b,x);
while(m--)
{
    in>>t>>u>>v;--u;
    if(t==0)
        s=0,aib_q(b),out<<s<<'\n';
        else upd(b);
}
//out<<s;
}