Add Max Fenwick Tree
diff --git a/data_structures/binary_tree/maximum_fenwick_tree.py b/data_structures/binary_tree/maximum_fenwick_tree.py
new file mode 100644
index 000000000000..e90bd634d51c
--- /dev/null
+++ b/data_structures/binary_tree/maximum_fenwick_tree.py
@@ -0,0 +1,102 @@
+class MaxFenwickTree:
+    """
+    Maximum Fenwick Tree
+
+    More info: https://cp-algorithms.com/data_structures/fenwick.html
+    ---------
+    >>> ft = MaxFenwickTree(5)
+    >>> ft.query(0, 5)
+    0
+    >>> ft.update(4, 100)
+    >>> ft.query(0, 5)
+    100
+    >>> ft.update(4, 0)
+    >>> ft.update(2, 20)
+    >>> ft.query(0, 5)
+    20
+    >>> ft.update(4, 10)
+    >>> ft.query(2, 5)
+    10
+    >>> ft.query(1, 5)
+    20
+    >>> ft.update(2, 0)
+    >>> ft.query(0, 5)
+    10
+    >>> ft = MaxFenwickTree(10000)
+    >>> ft.update(255, 30)
+    >>> ft.query(0, 10000)
+    30
+    """
+
+    def __init__(self, size: int) -> None:
+        """
+        Create empty Maximum Fenwick Tree with specified size
+
+        Parameters:
+            size: size of Array
+
+        Returns:
+            None
+        """
+        self.size = size
+        self.arr = [0] * size
+        self.tree = [0] * size
+
+    @staticmethod
+    def get_next(index: int) -> int:
+        """
+        Get next index in O(1)
+        """
+        return index + (index & -index)
+
+    @staticmethod
+    def get_prev(index: int) -> int:
+        """
+        Get previous index in O(1)
+        """
+        return index - (index & -index)
+
+    def update(self, index: int, value: int) -> None:
+        """
+        Set index to value in O(lg^2 N)
+
+        Parameters:
+            index: index to update
+            value: value to set
+
+        Returns:
+            None
+        """
+        self.arr[index] = value
+        while index < self.size:
+            self.tree[index] = max(value, self.query(self.get_prev(index), index))
+            index = self.get_next(index)
+
+    def query(self, left: int, right: int) -> int:
+        """
+        Answer the query of maximum range [l, r) in O(lg^2 N)
+
+        Parameters:
+            left: left index of query range (inclusive)
+            right: right index of query range (exclusive)
+
+        Returns:
+            Maximum value of range [left, right)
+        """
+        right -= 1  # Because of right is exclusive
+        result = 0
+        while left < right:
+            current_left = self.get_prev(right)
+            if left < current_left:
+                result = max(result, self.tree[right])
+                right = current_left
+            else:
+                result = max(result, self.arr[right])
+                right -= 1
+        return result
+
+
+if __name__ == "__main__":
+    import doctest
+
+    doctest.testmod()

### Describe your change:
I created MaxFenwickTreeOneBasedIndexing wich solves this problem:
- Update A[i] = value
- Query Maximum of Range (l, r]

This algorithm use classic fenwick tree with some changes in key ideas.

* [x] Add an algorithm?
* [ ] Fix a bug or typo in an existing algorithm?
* [ ] Documentation change?

### Checklist:
* [x] I have read [CONTRIBUTING.md](https://github.com/TheAlgorithms/Python/blob/master/CONTRIBUTING.md).
* [x] This pull request is all my own work -- I have not plagiarized.
* [x] I know that pull requests will not be merged if they fail the automated tests.
* [x] This PR only changes one algorithm file.  To ease review, please open separate PRs for separate algorithms.
* [x] All new Python files are placed inside an existing directory.
* [x] All filenames are in all lowercase characters with no spaces or dashes.
* [x] All functions and variable names follow Python naming conventions.
* [x] All function parameters and return values are annotated with Python [type hints](https://docs.python.org/3/library/typing.html).
* [x] All functions have [doctests](https://docs.python.org/3/library/doctest.html) that pass the automated testing.
* [x] All new algorithms have a URL in its comments that points to Wikipedia or other similar explanation.
* [x] If this pull request resolves one or more open issues then the commit message contains `Fixes: #{$ISSUE_NO}`.
