struct Val { ll v[5]; void set(ll x){ rep(i,5){ v[i]=x; x=Isqrt(x); } } void shift(){ v[0]=v[1]; v[1]=v[2]; v[2]=v[3]; v[3]=v[4]; v[4]=v[4]?1:0; } }; struct Fun { Val v; ll n; }; Val segtree_rh_merge(Val a,Val b){ rep(i,5){ b.v[i]+=a.v[i]; } return b; } Val segtree_rh_apply(Fun a,Val b){ if(a.n){ rep(a.n){ b.shift(); } }else{ rep(i,5){ b.v[i]=a.v.v[i]; } } return b; } Fun segtree_rh_compose(Fun a,Fun b){ if(b.n){ if(a.n){ b.n+=a.n; }else{ rep(b.n){ a.v.shift(); } b=a; } } return b; } { ll@n,@q; segtree_rht; t.malloc(n,1); rep(i,n){ ll@a; t[i].set(a); } t.build(); rep(q){ ll@a,@l,@r; if(a==0){ wt(l