Design a data structure for maintaining dynamic sequence x_1, x_2,... , x_n
which provides operations:
Insert(a,i) - inserts a as x_i, indexes from i+1 to n go up by 1
Delete(i) - deletes x_i, indexes from i+1 to n go down by 1
Find(i) - returns element x_i
Sum_even() - returns sum of the elements with even indexes
순서가 동적 그래서 그것을 유지하기 위해 AVL 트리를 사용하고 싶습니다. 그래서 발견, 삭제 및 삽입을 위해 표준 트릭을 사용할 수 있다고 생각합니다.이 노드에 뿌리를 둔 하위 트리의 각 노드 크기 만 유지하면됩니다. 그러면 O (log n) 시간에 i 번째 요소를 찾기 위해 트리를 쉽게 탐색 할 수 있습니다. 그러면 Inorder가 x_1, x_2, ..., x_n을 제공합니다.
그러나 Sum_even()에 대해 각 노드의 짝수 및 홀수 인덱스가있는 요소의 합계도 있어야합니다. 삽입 또는 삭제 중에는 업데이트하기가 어렵습니다. 어떻게 작동해야합니까? 아무도 도와 줄 수 있습니까?
, 나는 그것이 일반적으로 단지를 저장하는 것이 더 유용 발견했습니다 두 하위 트리가 아닌 왼쪽 하위 트리의 노드 수. –