제출 #1188581

#제출 시각아이디문제언어결과실행 시간메모리
1188581ofozBouquet (EGOI24_bouquet)Pypy 3
70 / 100
3097 ms225804 KiB
from math import ceil def update(v: int, tl: int, tr: int, i: int, tree: list, segments: list, dp: list): if tl == tr: tree[v] = [tl, tl, dp[tl]] else: tm = (tl+tr)//2 if i <= tm: update(2*v, tl, tm, i, tree, segments, dp) else: update(2*v+1, tm+1, tr, i, tree, segments, dp) tree[v] = [ min(tree[2*v][0], tree[2*v+1][0]), max(tree[2*v][1], tree[2*v+1][1]), max(tree[2*v][2], tree[2*v+1][2]) ] def query(v: int, tl: int, tr: int, x: int, tree: list): # print(tl, tr, tree[v], x) if x <= tree[v][0]: return 0 if x > tree[v][1]: return tree[v][2] tm = (tl+tr)//2 a = query(2*v, tl, tm, x, tree) b = query(2*v+1, tm+1, tr, x, tree) return max(a, b) def solve(): n = int(input()) tree = [[float('inf'), float('inf'), -1] for _ in range(4*n)] dp = [1] * n segments = [] for i in range(n): l, r = map(int, input().split(" ")) segments.append((l, r)) upd = [[] for _ in range(n)] for i in range(n): # print(tree) l, r = segments[i] mx_j = query(1, 0, n-1, i - l, tree) dp[i] = max(dp[i], mx_j + 1) upd[min(n-1, i + r)].append(i) for j in upd[i]: update(1, 0, n-1, j, tree, segments, dp) # print(query(1, 0, n-1, n-1, tree)) print(max(dp)) # j < i - l[i] solve()

컴파일 시 표준 출력 (stdout) 메시지

Compiling 'Main.py'...

=======
  adding: __main__.pyc (deflated 47%)

=======
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...