struct V { ll v[6]; void set(ll x){ rep(i,6){ 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[5]; } }; struct Val { V v; ll m; }; struct Fun { V v; ll n; }; Val segtree_rh_merge(Val a,Val b){ rep(i,6){ b.v.v[i]+=a.v.v[i]; } b.m+=a.m; return b; } Val segtree_rh_apply(Fun a,Val b){ if(a.n){ rep(a.n){ b.v.shift(); } }else{ rep(i,6){ b.v.v[i]=a.v.v[i]*b.m; } } return b; } Fun segtree_rh_compose(Fun a,Fun b){ if(a.n){ if(b.n){ a.n+=b.n; }else{ rep(a.n){ b.v.shift(); } a=b; } } return a; } { ll@n,@q; segtree_rht; t.malloc(n,1); rep(i,n){ ll@a; t[i].v.set(a); t[i].m=1; } t.build(); rep(q){ ll@a,@l,@r; if(a==0){ wt(l