import
java.util.*;
import
java.io.*;
class
GFG{
public
static
ArrayList<Integer> expand(
int
idx, ArrayList<Integer> A)
{
int
l = idx -
1
;
int
r = idx +
1
;
while
(l >=
0
) {
if
(A.get(idx) > A.get(l)) {
--l;
}
else
{
break
;
}
}
if
(l <
0
|| l == idx) {
l = -
2
;
}
while
(r < A.size()) {
if
(A.get(idx) > A.get(r)) {
++r;
}
else
{
break
;
}
}
if
(r >= A.size() || r == idx) {
r = -
2
;
}
return
new
ArrayList<Integer>(List.of(l, r));
}
public
static
ArrayList<Integer> minJumps(
int
N, ArrayList<Integer> A)
{
ArrayList<Integer> ans =
new
ArrayList<Integer>();
for
(
int
i =
0
; i < N ; i++){
ans.add(
0
);
}
TreeMap<Integer, ArrayList<Integer>> mp =
new
TreeMap<Integer, ArrayList<Integer>>();
TreeMap<Integer, Integer> iToA =
new
TreeMap<Integer, Integer>();
TreeMap<Integer, Integer> AToi =
new
TreeMap<Integer, Integer>();
int
big = A.get(
0
);
for
(
int
i =
0
; i < N ; ++i) {
big = Math.max(big, A.get(i));
mp.put(i, expand(i, A));
iToA.put(i, A.get(i));
AToi.put(A.get(i), i);
}
Collections.sort(A);
Collections.reverse(A);
for
(
int
i =
0
; i < A.size() ; ++i) {
int
m =
0
;
if
(A.get(i) == big) {
int
cur = AToi.get(A.get(i));
ans.set(cur,
0
);
continue
;
}
int
cur = AToi.get(A.get(i));
int
l = mp.get(cur).get(
0
);
int
r = mp.get(cur).get(
1
);
if
(l >=
0
&& r < N) {
m = Math.min(ans.get(l), ans.get(r)) +
1
;
}
else
if
(l <
0
&& r < N) {
m = ans.get(r) +
1
;
}
else
if
(l >=
0
&& r >= N) {
m = ans.get(l) +
1
;
}
ans.set(cur, m);
}
return
ans;
}
public
static
void
main(String args[])
{
ArrayList<Integer> arr =
new
ArrayList<Integer>(List.of(
5
,
1
,
3
,
4
,
7
));
int
N = arr.size();
ArrayList<Integer> out = minJumps(N, arr);
for
(
int
i =
0
; i < out.size() ; i++){
System.out.print(out.get(i) +
" "
);
}
System.out.println(
""
);
}
}