import
java.util.*;
import
java.lang.*;
class
GFG
{
static
void
printAnswer(
int
answer[],
int
N)
{
for
(
int
i =
1
; i <= N; i++)
{
System.out.print(answer[i]+
" "
);
}
}
static
void
updateAnswerArray(
int
answer[],
int
N)
{
int
i =
0
;
while
(answer[i] == -
1
)
i++;
int
minimum = answer[i];
while
(i <= N) {
if
(answer[i] == -
1
)
answer[i] = minimum;
else
answer[i] = Math.min(minimum, answer[i]);
minimum = Math.min(minimum, answer[i]);
i++;
}
}
static
void
lengthOfSubarray(ArrayList<ArrayList<Integer>> indices,
Set<Integer> st,
int
N)
{
int
[] answer =
new
int
[N +
1
];
Arrays.fill(answer, -
1
);
Iterator itr = st.iterator();
while
(itr.hasNext())
{
int
start = -
1
;
int
gap = -
1
;
int
t = (
int
)itr.next();
indices.get(t).add(N);
for
(
int
i =
0
; i < indices.get(t).size(); i++)
{
gap = Math.max(gap, indices.get(t).get(i) - start);
start = indices.get(t).get(i);
}
if
(answer[gap] == -
1
)
answer[gap] = t;
}
updateAnswerArray(answer, N);
printAnswer(answer, N);
}
static
void
smallestPresentNumber(
int
arr[],
int
N)
{
ArrayList<ArrayList<Integer>> indices =
new
ArrayList<>();
for
(
int
i =
0
; i <= N; i++)
indices.add(
new
ArrayList<Integer>());
Set<Integer> elements =
new
HashSet<>();
for
(
int
i =
0
; i < N; i++)
{
indices.get(arr[i]).add(i);
elements.add(arr[i]);
}
lengthOfSubarray(indices, elements, N);
}
public
static
void
main (String[] args)
{
int
arr[] = {
2
,
3
,
5
,
3
,
2
,
3
,
1
,
3
,
2
,
7
};
int
N = arr.length;
smallestPresentNumber(arr, N);
}
}