1- class Bit :
2- def __init__ (self , n , default = 0 ): self .size , self .tree = n , [default ] * (n + 1 )
3- # get sum of [0, i]
4- def sum (self , i ):
5- s = 0
1+ class BIT :
2+ def __init__ (self , li ):
3+ self .n , self .data = len (li ) + 1 , [0 ] + li
4+ for i in range (1 , self .n ):
5+ if i + (i & - i ) < self .n : self .data [i + (i & - i )] += self .data [i ]
6+
7+ def add (self , i , a ):
8+ i += 1
9+ while i < self .n :
10+ self .data [i ] += a
11+ i += i & - i
12+
13+ # sum of [0, i)
14+ def acc (self , i ):
15+ res = 0
616 while i > 0 :
7- s += self .tree [i ]
17+ res += self .data [i ]
818 i -= i & - i
9- return s
19+ return res
1020
11- def add (self , i , x ):
12- i = max (i , 1 )
13- while i <= self .size :
14- self .tree [i ] += x
15- i += i & - i
21+ # sum of [l, r)
22+ def get (self , l , r = None ):
23+ if r is None : r = l + 1
24+ return self .acc (r ) - self .acc (l )
25+
26+
27+ # class ExBIT:
28+ # def __init__(self, n):
29+ # self.p = Bit(n + 1)
30+ # self.q = Bit(n + 1)
31+
32+ # # add x to [l, r] (not [l, r)])
33+ # def add(self, x, l, r=None):
34+ # if r is None: r = l
35+ # r += 1
36+ # self.p.add(l, -x * l)
37+ # self.p.add(r, x * r)
38+ # self.q.add(l, x)
39+ # self.q.add(r, -x)
40+
41+ # def sum(self, l, r):
42+ # r += 1
43+ # return self.p.sum(r) + self.q.sum(r) * r - self.p.sum(l) - self.q.sum(l) * l
1644
17- # get sum of [l, r], or just l
18- def get (self , l , r = None ):
19- if r is None : r = l
20- return self .sum (r ) - self .sum (l - 1 )
21-
22- class ExBIT :
23- def __init__ (self , n ):
24- self .p = Bit (n + 1 )
25- self .q = Bit (n + 1 )
26-
27- # add x to [l, r] (not [l, r)])
28- def add (self , x , l , r = None ):
29- if r is None : r = l
30- r += 1
31- self .p .add (l , - x * l )
32- self .p .add (r , x * r )
33- self .q .add (l , x )
34- self .q .add (r , - x )
35-
36- def sum (self , l , r ):
37- r += 1
38- return self .p .sum (r ) + self .q .sum (r ) * r - self .p .sum (l ) - self .q .sum (l ) * l
39-
40- def get (self , l , r = None ):
41- if r is None : r = l
42- return self .sum (l , r )
45+ # def get(self, l, r=None):
46+ # if r is None: r = l
47+ # return self.sum(l, r)
0 commit comments