import
sys
MAX
=
1000000
st
=
[
0
]
*
(
3
*
MAX
)
def
getMid(s, e):
return
s
+
(e
-
s)
/
/
2
def
constructST(node, s, e, arr):
if
(s
=
=
e):
st[node]
=
arr[s]
return
mid
=
getMid(s, e)
constructST(
2
*
node, s, mid, arr)
constructST(
2
*
node
+
1
, mid
+
1
, e, arr)
st[node]
=
max
(st[
2
*
node], st[
2
*
node
+
1
])
def
getMax(node, s, e, l, r):
if
(s > r
or
e < l):
return
(
-
sys.maxsize
-
1
)
if
(s >
=
l
and
e <
=
r):
return
st[node]
mid
=
getMid(s, e)
return
max
(getMax(
2
*
node, s, mid, l, r),
getMax(
2
*
node
+
1
, mid
+
1
, e, l, r))
def
printKMax(n, k):
for
i
in
range
(n):
if
((k
-
1
+
i) < n):
print
(getMax(
1
,
0
, n
-
1
, i,
k
-
1
+
i), end
=
" "
)
else
:
break
if
__name__
=
=
"__main__"
:
k
=
4
arr
=
[
8
,
5
,
10
,
7
,
9
,
4
,
15
,
12
,
90
,
13
]
n
=
len
(arr)
constructST(
1
,
0
, n
-
1
, arr)
printKMax(n, k)