만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

이진 탐색 트리

시간 제한2초메모리 제한256 MB

요약
n개의 이진 탐색 트리에서 구간 [l, r]에 속한 모든 트리에 값 w를 삽입하고, x번째 트리에서 a를 찾을 때 방문한 노드 값의 합을 구합니다.
난이도

어려움10점 중 8점

유형
세그먼트 트리, 트리, 이분 탐색
정답자
아직 제출이 없습니다

문제

이진 탐색 트리(BST)는 기본적인 자료구조이다. BST는 루트가 있는 이진 트리이며, 각 노드에 값을 저장한다. 노드 xx가 값 aa를 가지면, xx의 왼쪽 서브트리에 있는 모든 값은 aa보다 작고, 오른쪽 서브트리에 있는 모든 값은 aa보다 크다. 구현을 통일하기 위해, 루트가 xx인 BST에서 값 aa를 찾는 구현을 다음과 같이 제공한다. 여기서 l[x]l[x]는 xx의 왼쪽 자식, r[x]r[x]는 xx의 오른쪽 자식, w[x]w[x]는 xx의 값이다. 왼쪽 자식(오른쪽 자식)이 없으면 l[x]l[x] (r[x]r[x])는 00이다. A(root,a)A(root, a)는 find(root, a)가 방문하는 모든 노드의 배열이다. find(root, a)의 비용은 A(root,a)A(root, a)에 속한 모든 vv에 대해 w[v]w[v]를 더한 값이다. 비어 있는 BST가 nn개 있고, mm개의 연산을 빠르게 처리해야 한다. 연산은 두 종류이다. 1 l r w 형식의 연산 1은 각 i∈[l,r]i \in [l, r]에 대해 ii번째 BST에 정수 ww를 삽입한다. 이 BST들에는 ww가 이미 없다고 보장된다. 삽입은 find와 같은 경로를 따라 루트에서 시작하되, 마지막 find(0, w) 호출 대신 그 위치에 값이 ww인 새 노드를 만들고 끝낸다. 2 x a 형식의 연산 2는 xx번째 BST에서 aa를 찾는 비용을 계산한다.

입력

첫 줄에 두 정수 nn과 mm (1≤n,m≤2⋅1051 \le n, m \le 2 \cdot 10^{5})이 주어진다. nn은 BST의 개수, mm은 연산의 개수이다. 이후 mm개의 줄에 연산이 한 줄씩 주어지며, 형식은 1 l r w (1≤l≤r≤n1 \le l \le r \le n; 1≤w≤1091 \le w \le 10^{9}) 또는 2 x a (1≤x≤n1 \le x \le n; 1≤a≤1091 \le a \le 10^{9}) 중 하나이다. 삽입되는 모든 수 ww는 서로 다르다고 보장된다.

출력

두 번째 종류의 연산마다 비용을 정수 하나로 한 줄에 출력한다.

예제1

  1. 예제 1

    입력
    3 9
    1 1 2 2
    1 1 3 1
    1 2 3 3
    2 1 2
    2 1 4
    2 2 2
    2 2 4
    2 3 2
    2 3 4
    
    예상 출력
    2
    2
    2
    5
    4
    4