#include #include using namespace std; #define rep(i,n) for(int i=0;i=0;i--) #define rng(i,c,n) for(int i=c;i #define _4ab8goq ios::sync_with_stdio(0),cin.tie(0); typedef long long ll; typedef vector vi; typedef pair pii; void print(){cout<<'\n';} template void print(const h&v,const t&...u){cout<r.v?l.v:r.v; // print("a",ret.len,l.dp[0][0],r.dp[0][0]); rep(i,4){ rng(j,i,4){ ret.dp[i][j]=max(l.dp[i][j],r.dp[i][j]); } } rep(i,4){ rng(j,i,4){ rng(s,j,4){ rng(e,s,4){ ret.dp[i][e]=max(ret.dp[i][e],l.dp[i][j]+r.dp[s][e]); } } } } return ret; } N e(){ return N{}; } N mapping(int l,N r){ if(l==-1) return r; r.v=l; rep(i,4){ rng(j,i,4){ r.dp[i][j]=-inf; } } r.dp[l][l]=r.len; return r; } int composition(int l,int r){ if(l==-1) return r; if(r==-1) return l; return l; } int id(){ return -1; } void slv(){ int n; cin>>n; vi a(n); rep(i,n){ cin>>a[i]; } rep(i,n){ a[i]-=1; } atcoder::lazy_segtree seg(n); rep(i,n){ N now; now.len=1; now.dp[a[i]][a[i]]=1; seg.set(i,now); } // N now=seg.prod(0,n); // // print(now.dp[0][0]); // seg.apply(4,n,0); // now=seg.prod(7,10); // print(now.v); // rep(i,4){ // rng(j,i,4){ // print(i,j,now.dp[i][j]); // } // } // print(now.len,now.dp[0][0]); // // N now=seg.prod(2,6); // // print(now.len); // print("bef"); int q; cin>>q; rep(iter,q){ int typ,l,r; cin>>typ>>l>>r; l-=1,r-=1; if(typ==1){ N now=seg.prod(l,r+1); int ans=0; rep(i,4){ rng(j,i,4){ // print(i,j,now.dp[i][j]); ans=max(ans,now.dp[i][j]); } } // print(now.dp[0][0]); // print("e",now.len); cout<>x; x-=1; seg.apply(l,r+1,x); } } } signed main(){ _4ab8goq; slv(); }