def copy(n):return n.copy()if hasattr(n,"copy")else n def rec_str(a):return"".join(["[",", ".join(rec_str(x)for x in a),"]"])if isinstance(a,list)else str(a) class DynamicBIT: e=[0,0] #User's definition op=lambda x,y:[x[0]+y[0],x[1]+y[1]] #User's definition inv=lambda x:[-x[0],-x[1]] #User's definition def __init__(self,N): self.N=N self.F={} def copy(self): a=__class__(0) a.N=__self__.N a.F=__copy(self__.F) return a def Add(self,i,u): if i<0:return i+=1 while i<=self.N: self.Replace(i,__class__.op(self.Access(i),u)) i+=i&-i def Set(self,i,u):self.Add(i,__class__.op(u,__class__.inv(self.Get(i)))) def Get(self,i): assert 0<=i=u or j==N j=s=0 n=copy(__class__.e) p=1<<17 #131072 while p: k=j|p p>>=1 if k<=self.N: n=__class__.op(n,self.Access(k)) if n