Skip to content

Commit 64fa808

Browse files
committed
fix: 5-3 #3
1 parent 2184f66 commit 64fa808

File tree

1 file changed

+19
-14
lines changed

1 file changed

+19
-14
lines changed

3-week3/5/JustKode.py

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,32 @@
11
import sys
2-
sys.setrecursionlimit(300000)
2+
sys.setrecursionlimit(10**9)
33

44
n = int(input())
5-
heights = list(map(int, input().split()))
5+
arr = list(map(int, input().split()))
66
tree = [0] * (4 * n)
77

8-
def init(arr, tree, node, start, end):
8+
def init(node, start, end):
9+
global arr, tree
910
if start == end:
1011
tree[node] = start
1112
else:
1213
mid = (start + end) // 2
13-
init(arr, tree, node * 2, start, mid)
14-
init(arr, tree, node * 2 + 1, mid + 1, end)
14+
init(node * 2, start, mid)
15+
init(node * 2 + 1, mid + 1, end)
1516
tree[node] = tree[node * 2] if arr[tree[node * 2]] < arr[tree[node * 2 + 1]] else tree[node * 2 + 1]
1617

17-
def find(arr, tree, node, start, end, left, right):
18+
19+
def find(node, start, end, left, right):
20+
global arr, tree
1821
if left > end or right < start:
1922
return -1
2023

2124
if left <= start and end <= right:
2225
return tree[node]
2326

2427
mid = (start + end) // 2
25-
i = find(arr, tree, node * 2, start, mid, left, right)
26-
j = find(arr, tree, node * 2 + 1, mid + 1, end, left, right)
28+
i = find(node * 2, start, mid, left, right)
29+
j = find(node * 2 + 1, mid + 1, end, left, right)
2730

2831
if i == -1:
2932
return j
@@ -32,19 +35,21 @@ def find(arr, tree, node, start, end, left, right):
3235
else:
3336
return i if arr[i] < arr[j] else j
3437

35-
def large(arr, tree, start, end):
36-
m = find(arr, tree, 1, 0, n - 1, start, end)
38+
39+
def large(start, end):
40+
global arr, tree
41+
m = find(1, 0, n - 1, start, end)
3742
area = (end - start + 1) * arr[m]
3843

3944
if start <= m - 1:
40-
temp = large(arr, tree, start, m - 1)
45+
temp = large(start, m - 1)
4146
area = max(area, temp)
4247

4348
if m + 1 <= end:
44-
temp = large(arr, tree, m + 1, end)
49+
temp = large(m + 1, end)
4550
area = max(area, temp)
4651

4752
return area
4853

49-
init(heights, tree, 1, 0, n - 1)
50-
print(large(heights, tree, 0, n - 1))
54+
init(1, 0, n - 1)
55+
print(large(0, n - 1))

0 commit comments

Comments
 (0)