#include <bits/stdc++.h>
using namespace std;
const int MAXN = 200010;
int a[MAXN], n, ans[MAXN];
struct node {
  int len;
  int val;
  node() {}
  node(int tlen, int tval) : len(tlen), val(tval) {}
};
stack<node> s;
int main() {
  while (~scanf("%d", &n)) {
    for (int i = 1; i <= n; i++) {
      scanf("%d", &a[i]);
    }
    while (!s.empty()) s.pop();
    memset(ans, 0, sizeof(ans));
    for (int i = 1; i <= n; i++) {
      int len = 0;
      while (!s.empty()) {
        node tp = s.top();
        if (tp.val < a[i]) break;
        s.pop();
        int ret = tp.len + len;
        ans[ret] = max(ans[ret], tp.val);
        len += tp.len;
      }
      s.push(node(len + 1, a[i]));
    }
    int len = 0;
    while (!s.empty()) {
      node tp = s.top();
      s.pop();
      int ret = len + tp.len;
      ans[ret] = max(ans[ret], tp.val);
      len += tp.len;
    }
    for (int i = n; i >= 1; i--) {
      ans[i] = max(ans[i], ans[i + 1]);
    }
    for (int i = 1; i <= n; i++) {
      printf("%d ", ans[i]);
    }
    printf("\n");
  }
  return 0;
}
