// ์ฌ๊ท๋ฅผ ์ด์ฉํ binary search
public static int binarySearch (int [] arr, int start, int end, int value) {
int result = 0;
int mid = (start+end)/2;
if (value == arr[mid]) {
result = arr[mid];
} else if (value < mid) {
result = binarySearch (arr,start, mid-1,value);
} else if (value > mid) {
result = binarySearch (arr,mid+1, end,value);
}
return result;
}
// while ์ ์ด์ฉํ binary search
private static int binarySearch_while (int s, int e, int target) {
int index = -1;
// ๋ฑํธ ๊ธฐํธ๊ฐ ๋ค์ด๊ฐ์ผํ๋ค
while (s <= e) {
int mid = (s+e)/2;
// target ์ฐพ๊ณ ์ ํ๋ ๊ฐ, dp[mid] ๋ฐฐ์ด์์ ์ค์๊ฐ
if (target == dp[mid]) {
return mid; // ์ฐพ์
else if (target < dp[mid]) {
e = mid; // ์ข์ธก ํ์
} else if (target > dp[mid]){
s = mid+1; // ์ฐ์ธก ํ์
}
}
return index; // ๊ฐ
}
private static int lower_bound (int s, int e, int target) {
while (s < e) {
int mid = (s+e)/2;
// target ์ฐพ๊ณ ์ ํ๋ ๊ฐ, dp[mid] ๋ฐฐ์ด์์ ์ค์๊ฐ
if (target <= dp[mid]) {
e = mid;
} else {
s = mid+1;
}
}
return e; // end ๋ฆฌํด
}
private static int upperBound(List data, int target) {
int begin = 0;
int end = data.size()-1;
while(begin < end) {
int mid = (begin + end) / 2;
// ํ๊ฒ ๊ฐ ๋ณด๋ค search ๊ฐ์ด ์๊ฑฐ๋ ๊ฐ๋ค๋ฉด
if(data.get(mid) <= target) {
begin = mid + 1;
}
else {
end = mid;
}
}
return end;
}