이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
def bisect(arr, v, asc):
lo = 0
hi = len(arr)
while lo < hi:
mid = lo + (hi - lo) // 2
if asc:
if v <= arr[mid]:
hi = mid
else:
lo = mid + 1
else:
if v >= arr[mid]:
hi = mid
else:
lo = mid + 1
return lo
def find_lis(inp):
lis_ending = [0] * len(inp)
lis_ending_arr = []
lis_starting = [0] * len(inp)
lis_starting_arr = []
for i in range(len(inp)):
# LIS ending at i
idx = bisect(lis_ending_arr, inp[i], True)
if idx == len(lis_ending_arr):
lis_ending_arr.append(inp[i])
else:
lis_ending_arr[idx] = inp[i]
lis_ending[i] = len(lis_ending_arr)
# LIS starting at i
j = len(inp) - 1 - i
idx = bisect(lis_starting_arr, inp[j], False)
if idx == len(lis_starting_arr):
lis_starting_arr.append(inp[j])
else:
lis_starting_arr[idx] = inp[j]
lis_starting[j] = len(lis_starting_arr)
return lis_ending, lis_starting
def beacon(inp):
lis_ending, lis_starting = find_lis(inp)
res = 0
for i in range(len(inp) - 1):
val = lis_ending[i] + lis_starting[i + 1]
res = max(res, val)
res = max(res, lis_ending[len(inp) - 1])
return res
n,x = map(int, input().split())
inp = [int(x) for x in input().split()]
print(beacon(inp))
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |