[docs]26defprod(self,l:int,r:int)->T:27"""Return op([l, r)). / 0 <= l <= r <= n / O(√N)"""28assert0<=l<=r<=self.n29ifl==r:30returnself.e31k1=l//self.size32k2=r//self.size33l-=k1*self.size34r-=k2*self.size35ifk1==k2:36s=reduce(self.op,self.data[k1][l:r])37else:38s=self.e39ifl<len(self.data[k1]):40s=reduce(self.op,self.data[k1][l:])41ifk1+1<k2:42s=(43reduce(self.op,self.bucket_data[k1+1:k2])44ifs==self.e45elsereduce(self.op,self.bucket_data[k1+1:k2],s)46)47ifk2<self.bucket_cntandr>0:48s=(49reduce(self.op,self.data[k2][:r])50ifs==self.e51elsereduce(self.op,self.data[k2][:r],s)52)53returns