#include #include #include #include #define rep(i,a,b) for(int i=(a);i<(b);i++) #define rrep(i,a,b) for(int i=(b)-1;i>=(a);i--) #define all(x) begin(x),end(x) #define sz(x) (int)(x).size() using namespace std; using namespace atcoder; using ll=long long; using ld=long double; using vll=vector; using vvll=vector; using vi=vector; using vvi=vector; using pll=pair; // using mint=modint; // using BoostPoint=boost::polygon::point_data; // using Voronoi=boost::polygon::voronoi_diagram; const int k=5; const int neg=-INT_MAX; struct Mat{ int a[k][k]; }; Mat idmat(){ Mat c; rep(i,0,k){ rep(j,0,k){ if(i==j)c.a[i][j]=0; else c.a[i][j]=neg; } } return c; } Mat mul(const Mat&a,const Mat&b){ Mat c; rep(i,0,k){ rep(j,0,k){ c.a[i][j]=neg; rep(t,0,k){ if(a.a[i][t]==neg||b.a[t][j]==neg)continue; c.a[i][j]=max(c.a[i][j],a.a[i][t]+b.a[t][j]); } } } return c; } Mat blockmat(int x,int len){ Mat c=idmat(); rep(i,0,x+1)c.a[i][x]=len; return c; } struct S{ Mat m; int len; }; S op(S l,S r){ return {mul(l.m,r.m),l.len+r.len}; } S e(){ return {idmat(),0}; } using F=int; F id(){ return -1; } S mapping(F f,S s){ if(f==-1||s.len==0)return s; s.m=blockmat(f,s.len); return s; } F composition(F f,F g){ if(f==-1)return g; return f; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int N; cin>>N; vi a(N); rep(i,0,N)cin>>a[i]; vectorinit(N); rep(i,0,N)init[i]={blockmat(a[i],1),1}; lazy_segtreeseg(init); int Q; cin>>Q; while(Q--){ int q,l,r; cin>>q>>l>>r; --l; if(q==1){ S s=seg.prod(l,r); int ans=1; rep(j,1,k)ans=max(ans,s.m.a[0][j]); cout<>x; seg.apply(l,r,x); } } }