#include <bits/stdc++.h>
const int MAX = 2e5 + 11;
using namespace std;
int N, A[MAX], L[MAX], R[MAX], B[MAX];
int main() {
  scanf("%d", &N);
  for (int i = 0; i < N; ++i) {
    scanf("%d", &A[i + 1]);
  }
  stack<int> S;
  for (int i = 1; i <= N; ++i) {
    while (!S.empty() && A[S.top()] >= A[i]) {
      S.pop();
    }
    L[i] = S.empty() ? 0 : S.top();
    S.push(i);
  }
  S = stack<int>();
  for (int i = N; i >= 1; --i) {
    while (!S.empty() && A[S.top()] >= A[i]) {
      S.pop();
    }
    R[i] = S.empty() ? N + 1 : S.top();
    S.push(i);
  }
  for (int i = 1; i <= N; ++i) {
    int t = R[i] - L[i] - 1;
    B[t] = max(B[t], A[i]);
  }
  for (int i = N; i >= 1; --i) {
    B[i] = max(B[i], B[i + 1]);
  }
  for (int i = 1; i <= N; ++i) {
    printf("%d ", B[i]);
  }
  return 0;
}
