package main
import (
"bufio"
"fmt"
"os"
)
type FastScanner struct {
r *bufio.Reader
}
func NewFastScanner() *FastScanner {
return &FastScanner{r: bufio.NewReaderSize(os.Stdin, 1<<20)}
}
func (fs *FastScanner) NextInt() int {
sign := 1
val := 0
b, _ := fs.r.ReadByte()
for (b < '0' || b > '9') && b != '-' {
b, _ = fs.r.ReadByte()
}
if b == '-' {
sign = -1
b, _ = fs.r.ReadByte()
}
for b >= '0' && b <= '9' {
val = val*10 + int(b-'0')
b2, err := fs.r.ReadByte()
if err != nil {
break
}
b = b2
}
return val * sign
}
func main() {
in := NewFastScanner()
out := bufio.NewWriterSize(os.Stdout, 1<<20)
defer out.Flush()
n := in.NextInt()
a := make([]int, n)
for i := 0; i < n; i++ {
a[i] = in.NextInt()
}
leftLess := make([]int, n)
rightLess := make([]int, n)
leftGreater := make([]int, n)
rightGreater := make([]int, n)
stack := make([]int, 0, n)
for i := 0; i < n; i++ {
for len(stack) > 0 && a[stack[len(stack)-1]] >= a[i] {
stack = stack[:len(stack)-1]
}
if len(stack) == 0 {
leftLess[i] = -1
} else {
leftLess[i] = stack[len(stack)-1]
}
stack = append(stack, i)
}
stack = stack[:0]
for i := n - 1; i >= 0; i-- {
for len(stack) > 0 && a[stack[len(stack)-1]] >= a[i] {
stack = stack[:len(stack)-1]
}
if len(stack) == 0 {
rightLess[i] = n
} else {
rightLess[i] = stack[len(stack)-1]
}
stack = append(stack, i)
}
stack = stack[:0]
for i := 0; i < n; i++ {
for len(stack) > 0 && a[stack[len(stack)-1]] <= a[i] {
stack = stack[:len(stack)-1]
}
if len(stack) == 0 {
leftGreater[i] = -1
} else {
leftGreater[i] = stack[len(stack)-1]
}
stack = append(stack, i)
}
stack = stack[:0]
for i := n - 1; i >= 0; i-- {
for len(stack) > 0 && a[stack[len(stack)-1]] <= a[i] {
stack = stack[:len(stack)-1]
}
if len(stack) == 0 {
rightGreater[i] = n
} else {
rightGreater[i] = stack[len(stack)-1]
}
stack = append(stack, i)
}
ans := make([]int, n)
for i := 0; i < n; i++ {
lenGE := rightLess[i] - leftLess[i] - 1
lenLE := rightGreater[i] - leftGreater[i] - 1
ge := lenGE / 2
le := (lenLE - 1) / 2
if ge < le {
ans[i] = le
} else {
ans[i] = ge
}
}
for i := 0; i < n; i++ {
if i > 0 {
fmt.Fprint(out, " ")
}
fmt.Fprint(out, ans[i])
}
}