2
public int[] longestObstacleCourseAtEachPosition(int[] obstacles) {3
int i = -1, cur = 0, lisSize = -1;4
int[] lis = new int[obstacles.length];5
int[] ans = new int[obstacles.length];7
for (int curHeight : obstacles) {8
if (i == -1 || lis[i] <= curHeight) {12
lisSize = search(lis, 0, i, curHeight);13
lis[lisSize] = curHeight;16
ans[cur++] = lisSize + 1;22
private int search(int[] nums, int start, int end, int target) {23
int left = start, right = end;25
while (left <= right) {26
int mid = left + (right - left) / 2;27
if (nums[mid] > target) {30
} else left = mid + 1;