이진 탐색 트리
시간 제한2초메모리 제한256 MB
n개의 이진 탐색 트리에서 구간 [l, r]에 속한 모든 트리에 값 w를 삽입하고, x번째 트리에서 a를 찾을 때 방문한 노드 값의 합을 구합니다.
문제
이진 탐색 트리(BST)는 기본적인 자료구조이다. BST는 루트가 있는 이진 트리이며, 각 노드에 값을 저장한다. 노드 가 값 를 가지면, 의 왼쪽 서브트리에 있는 모든 값은 보다 작고, 오른쪽 서브트리에 있는 모든 값은 보다 크다. 구현을 통일하기 위해, 루트가 인 BST에서 값 를 찾는 구현을 다음과 같이 제공한다.
여기서 는 의 왼쪽 자식, 는 의 오른쪽 자식, 는 의 값이다. 왼쪽 자식(오른쪽 자식)이 없으면 ()는 이다. 는 find(root, a)가 방문하는 모든 노드의 배열이다. find(root, a)의 비용은 에 속한 모든 에 대해 를 더한 값이다. 비어 있는 BST가 개 있고, 개의 연산을 빠르게 처리해야 한다. 연산은 두 종류이다. 1 l r w 형식의 연산 1은 각 에 대해 번째 BST에 정수 를 삽입한다. 이 BST들에는 가 이미 없다고 보장된다. 삽입은 find와 같은 경로를 따라 루트에서 시작하되, 마지막 find(0, w) 호출 대신 그 위치에 값이 인 새 노드를 만들고 끝낸다. 2 x a 형식의 연산 2는 번째 BST에서 를 찾는 비용을 계산한다.
입력
첫 줄에 두 정수 과 ()이 주어진다. 은 BST의 개수, 은 연산의 개수이다. 이후 개의 줄에 연산이 한 줄씩 주어지며, 형식은 1 l r w (; ) 또는 2 x a (; ) 중 하나이다. 삽입되는 모든 수 는 서로 다르다고 보장된다.
출력
두 번째 종류의 연산마다 비용을 정수 하나로 한 줄에 출력한다.