606 세그먼트트리
| source | www.youtube.com/watch |
| type | 📌 개발노트 |
| parent_topic | 600-알고리즘 & 코딩테스트 |
| types | 이론 |
이진트리여야함
리프노드만 원본
종류
- 트리의 구간합을 구하는경우
- 배열을 구간합으로 구하는경우
- 이때 배열의 각값은 리프노드가된다.
- 이때 질의 인덱스를 세그먼트 트리인덱스로 바꿔야한다
- 질의인덱스+ 2^k -1
고로 리프노드 로 트리를 초기화해야함
리프노트로 초기화할때 배열의 크기
리프노드가 N개일 때
$2^k \geq N$
배열의 크기: $2^k*2$
- start_index % 2== 1일 때 해당 노드를 선택한다. // 자식노드임
- end_index % 2== 0일 때 해당 노드를 선택한다. //부모노드임
- start_index depth 변경: start_index = (start_index + 1) / 2 연산을 실행한다. //부모노드로이동
- end_index depth 변경: end_index = (end_index - 1) / 2 연산을 실행한다. //부모노드로 이동
- 1~4를 반복하다가 end_index < start_index가 되면 종료한다.
사람들은존나천재가틀림없다.