Skip to content

Commit 3974deb

Browse files
committed
feat(SquareDivision): 変更がO(1)で行なえる場合のバージョンを作った
1 parent b2bbc67 commit 3974deb

File tree

2 files changed

+38
-0
lines changed

2 files changed

+38
-0
lines changed

code/main.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1424,6 +1424,25 @@ def get(self, i: int) -> Any:
14241424
return self.lis[i]
14251425

14261426

1427+
class SquareDivisionSpeedy(SquareDivision):
1428+
def __init__(
1429+
self,
1430+
lis: List[Any],
1431+
op: Callable[[Any, Any], Any],
1432+
delete: Callable[[Any, Any], Any],
1433+
) -> None:
1434+
self.delete = delete
1435+
super().__init__(lis, op)
1436+
1437+
def update(self, i: int, x: Any) -> None:
1438+
assert 0 <= i < self.n
1439+
1440+
block_ind = self.get_block_index_left(i)
1441+
self.blocks[block_ind] = self.delete(self.blocks[block_ind], self.lis[i])
1442+
self.lis[i] = x
1443+
self.blocks[block_ind] = self.op(self.blocks[block_ind], self.lis[i])
1444+
1445+
14271446
from typing import List
14281447

14291448

libs/square-division.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,3 +65,22 @@ def update(self, i: int, x: Any) -> None:
6565
def get(self, i: int) -> Any:
6666
assert 0 <= i < self.n
6767
return self.lis[i]
68+
69+
70+
class SquareDivisionSpeedy(SquareDivision):
71+
def __init__(
72+
self,
73+
lis: List[Any],
74+
op: Callable[[Any, Any], Any],
75+
delete: Callable[[Any, Any], Any],
76+
) -> None:
77+
self.delete = delete
78+
super().__init__(lis, op)
79+
80+
def update(self, i: int, x: Any) -> None:
81+
assert 0 <= i < self.n
82+
83+
block_ind = self.get_block_index_left(i)
84+
self.blocks[block_ind] = self.delete(self.blocks[block_ind], self.lis[i])
85+
self.lis[i] = x
86+
self.blocks[block_ind] = self.op(self.blocks[block_ind], self.lis[i])

0 commit comments

Comments
 (0)