#include <bits/stdc++.h>
using namespace std;
const int INF = 0x3f3f3f3f;
const int MAXN = 200005;
int n, l, r, ans[MAXN];
struct X {
  int v;
  int w;
} num[MAXN];
int main() {
  int nmin = INF, nmax = -INF;
  cin >> n;
  for (int i = 0; i < n; i++) {
    scanf("%d", &num[i].v);
    num[i].w = 1;
  }
  memset(ans, -1, sizeof(ans));
  stack<struct X> s;
  for (int i = 0; i < n; i++) {
    if (s.empty() || num[i].v >= s.top().v)
      s.push(num[i]);
    else {
      while (!s.empty() && s.top().v > num[i].v) {
        struct X temp = s.top();
        s.pop();
        ans[temp.w] = max(ans[temp.w], temp.v);
        if (s.empty() || s.top().v <= num[i].v)
          num[i].w += temp.w;
        else
          s.top().w += temp.w;
      }
      s.push(num[i]);
    }
  }
  while (!s.empty()) {
    struct X temp = s.top();
    s.pop();
    if (!s.empty()) s.top().w += temp.w;
    ans[temp.w] = max(ans[temp.w], temp.v);
  }
  for (int i = n - 1; i >= 1; i--) {
    ans[i] = max(ans[i], ans[i + 1]);
  }
  for (int i = 1; i <= n; i++) printf("%d ", ans[i]);
  return 0;
}
