#1361
Platinum I
동적 배열과 쿼리
시간 제한
2s
메모리 제한
512MB
제출
1
정답
1
맞힌 사람
1
정답 비율
100.0%

문제

박정희 교수님의 자료구조 수업에서 서현이는 AVL 트리를 배웠다. AVL 트리는 균형 이진 탐색 트리의 하나로 O(logN)O(\log{N}) 시간 내에 원소를 추가, 제거, 조회할 수 있는 자료구조다. 균형 이진 탐색 트리는 AVL 트리 말고도, 스플레이 트리나 트립(Treap), 레드-블랙 트리, Weight-Balanced 트리 등등 다양하다.

이때, 균형 이진 탐색 트리의 키(key) 대신에 해당 노드의 왼쪽 노드 서브 트리 크기로 키를 암시적으로 생성하면 O(logN)O(\log{N}) 시간 내에 원소 추가, 제거, 조회 등이 가능한 동적 배열로 다룰 수 있다. 알고리즘 문제 해결에서는 이쪽을 더 많이 쓴다.

\C++의 std::vector<T> / Python의 list / Java의 ArrayList<T>균형 이진 탐색 트리
임의 접근O(1)O(1)O(logN)O(\log{N})
원소 추가O(N)O(N) (맨 뒤에 추가할 경우 O(1)O(1))O(logN)O(\log{N})
원소 제거O(N)O(N) (마지막 원소를 제거할 경우 O(1)O(1))O(logN)O(\log{N})

길이가 00인 배열이 주어진다. 이때, 다음 쿼리를 수행하는 프로그램을 작성해 보자.

  • 1 i x: 배열의 ii번째 원소 앞에 값이 xx인 원소를 하나 추가한다. 만약 i=현재 배열의 길이+1i=\text{현재 배열의 길이}+1라면 배열의 맨 뒤에 추가하는 것이다.
  • 2 j: 배열의 jj번째 원소를 배열에서 제거한다.
  • 3 l r: 현재 배열의 ll번째 원소부터 rr번째 원소까지 뒤집는다. 즉, 원래 배열이 A1,,Al1,Al,Al+1,,Ar1,Ar,Ar+1,ANA_1, \cdots, A_{l-1}, A_l, A_{l+1}, \cdots, A_{r-1}, A_r, A_{r+1} \cdots, A_N이었다면 A1,,Al1,Ar,Ar1,,Al+1,Al,Ar+1,,ANA_1, \cdots, A_{l-1}, A_r, A_{r-1}, \cdots, A_{l+1}, A_l, A_{r+1}, \cdots, A_N이 되는 것이다.
  • 4 i x: Ai=xA_i = x를 적용한다.
  • 5 l r: Al+Al+1++ArA_l + A_{l+1} + \cdots + A_r을 출력한다.

배열의 인덱스는 11부터 시작한다.

입력

첫째 줄에 QQ가 주어진다. (1Q3000001\le Q\le 300\,000)

둘째 줄부터 QQ개의 줄에 걸쳐 각 줄에 쿼리가 주어진다.

배열의 길이가 00인 상태에서는 1번 쿼리만 주어짐이 보장된다.

1i현재 배열의 길이+11\le i\le \text{현재 배열의 길이} + 1

1j현재 배열의 길이1\le j\le \text{현재 배열의 길이}

1lr현재 배열의 길이1\le l\le r\le \text{현재 배열의 길이}

109x109-10^9\le x\le 10^9

출력

5번 쿼리의 답을 한 줄에 하나씩 출력한다.

예제 입력 1

9
1 1 2
1 1 1
1 3 3
5 1 3
4 3 5
3 1 3
5 1 2
2 2
5 1 2

예제 출력 1

6
7
6
문제를 만든 사람
조서현
알고리즘 분류
코드 제출

코드를 제출하려면 로그인이 필요합니다.

로그인
내 제출
제출 내역이 없습니다.
맞은 사람
#순위사용자언어시간메모리코드 길이
8581🥇
조서현
PyPy1942ms104492KB2180B
난이도 투표
Platinum I1명 투표· 7일 전
로그인 후 AC 받으면 투표할 수 있습니다.
전체 제출
#사용자문제결과언어시간메모리코드 길이제출 시간
8581
맞았습니다
PyPy1942ms104492KB2180B2026. 05. 30. 06:17