1
1
import sys
2
- sys .setrecursionlimit (300000 )
2
+ sys .setrecursionlimit (10 ** 9 )
3
3
4
4
n = int (input ())
5
- heights = list (map (int , input ().split ()))
5
+ arr = list (map (int , input ().split ()))
6
6
tree = [0 ] * (4 * n )
7
7
8
- def init (arr , tree , node , start , end ):
8
+ def init (node , start , end ):
9
+ global arr , tree
9
10
if start == end :
10
11
tree [node ] = start
11
12
else :
12
13
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 )
15
16
tree [node ] = tree [node * 2 ] if arr [tree [node * 2 ]] < arr [tree [node * 2 + 1 ]] else tree [node * 2 + 1 ]
16
17
17
- def find (arr , tree , node , start , end , left , right ):
18
+
19
+ def find (node , start , end , left , right ):
20
+ global arr , tree
18
21
if left > end or right < start :
19
22
return - 1
20
23
21
24
if left <= start and end <= right :
22
25
return tree [node ]
23
26
24
27
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 )
27
30
28
31
if i == - 1 :
29
32
return j
@@ -32,19 +35,21 @@ def find(arr, tree, node, start, end, left, right):
32
35
else :
33
36
return i if arr [i ] < arr [j ] else j
34
37
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 )
37
42
area = (end - start + 1 ) * arr [m ]
38
43
39
44
if start <= m - 1 :
40
- temp = large (arr , tree , start , m - 1 )
45
+ temp = large (start , m - 1 )
41
46
area = max (area , temp )
42
47
43
48
if m + 1 <= end :
44
- temp = large (arr , tree , m + 1 , end )
49
+ temp = large (m + 1 , end )
45
50
area = max (area , temp )
46
51
47
52
return area
48
53
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