#include using namespace std; typedef long long ll; int N, Q; vector sum_, mx, mn, lz; vector hasLz; void pull(int nd){ sum_[nd]=sum_[2*nd]+sum_[2*nd+1]; mx[nd]=max(mx[2*nd],mx[2*nd+1]); mn[nd]=min(mn[2*nd],mn[2*nd+1]); } void applyA(int nd,int l,int r,ll v){ sum_[nd]=v*(ll)(r-l+1); mx[nd]=mn[nd]=v; lz[nd]=v; hasLz[nd]=1; } void push(int nd,int l,int r){ if(hasLz[nd]){ int m=(l+r)/2; applyA(2*nd,l,m,lz[nd]); applyA(2*nd+1,m+1,r,lz[nd]); hasLz[nd]=0; } } void build(int nd,int l,int r,vector&a){ if(l==r){sum_[nd]=mx[nd]=mn[nd]=a[l]; return;} int m=(l+r)/2; build(2*nd,l,m,a); build(2*nd+1,m+1,r,a); pull(nd); } void updA(int nd,int l,int r,int ql,int qr,ll v){ if(qr0&&v*v>x) v--; return v; } void updS(int nd,int l,int r,int ql,int qr){ if(qr>N>>Q; vector A(N); for(auto&x:A) cin>>x; sum_.assign(4*N,0); mx.assign(4*N,0); mn.assign(4*N,0); lz.assign(4*N,0); hasLz.assign(4*N,0); build(1,0,N-1,A); while(Q--){ int t; cin>>t; if(t==0){ int l,r; cin>>l>>r; if(l>l>>r>>x; if(l>l>>r; if(l