분류 전체보기 834

[core] segment Tree

세그먼트 트리는 구간 정보로 사용자가 원하는 아무 값이나 저장해 두는데, 가장 대표적인 사용 예는구간에 속한 원소들의 합구간에 속한 원소들의 곱구간 원소들 중 최댓값구간 원소들 중 최솟값등의 활용처가 있습니다. /** * @param L- 구하고자 하는 범위의 좌측 값 * @param R- 구하고자 하는 범위의 우측 값 * @param nodeNum - 현재 위치 (1번은 root이다.처음에는 1번부터...) * @param nodeL - 현재 nodeNum 값의 범위 중 좌측 값 * @param nodeR - 현재 nodeNum 값의 범위 중 우측 값 * @return */ public static int sum(int L, int R, int nodeNum, int nodeL, int nodeR) {..

Lower Bound

int lower_bound(int arr[], int target, int size) { int mid, start, end; start = 0, end = size-1; while (end > start) // end가 start보다 같거나 작아지면, 그 값이 Lower Bound이므로 반복을 종료한다. { mid = (start + end) / 2; if (arr[mid] >= target) // 중간값이 원하는 값보다 크거나 같을 경우, 끝값을 중간값으로 설정하여 다시 탐색한다. end = mid; else start = mid + 1; // 중간값이 원하는 값보다 작을 경우, 시작값을 중간값+1로 설정하여 다시 탐색한다. } return end; }