#include <bits/stdc++.h>
using namespace std;
const int MAXN = 200005;
int v[MAXN], l[MAXN], r[MAXN];
int ST[4 * MAXN];
int L[4 * MAXN];
int n;
void _update(int node, int lo, int hi, int i, int j, int val) {
  if (L[node]) {
    ST[node] = max(ST[node], L[node]);
    if (hi != lo) {
      L[2 * node] = max(L[node], L[2 * node]);
      L[2 * node + 1] = max(L[node], L[2 * node + 1]);
    }
    L[node] = 0;
  }
  if (lo > j || hi < i) return;
  if (lo >= i && hi <= j) {
    ST[node] = max(ST[node], val);
    if (hi != lo) {
      L[2 * node] = max(val, L[2 * node]);
      L[2 * node + 1] = max(val, L[2 * node + 1]);
    }
    return;
  }
  int mid = (lo + hi) / 2;
  _update(2 * node, lo, mid, i, j, val);
  _update(2 * node + 1, mid + 1, hi, i, j, val);
  ST[node] = max(ST[2 * node], ST[2 * node + 1]);
}
int _query(int node, int l, int r, int i, int j) {
  if (L[node]) {
    ST[node] = max(ST[node], L[node]);
    L[2 * node] = max(L[2 * node], L[node]);
    L[2 * node + 1] = max(L[2 * node + 1], L[node]);
    L[node] = 0;
  }
  if (r < i || l > j) return -1;
  if (l >= i && r <= j) return ST[node];
  int mid = (l + r) / 2;
  int p1 = _query(2 * node, l, mid, i, j);
  int p2 = _query(2 * node + 1, mid + 1, r, i, j);
  return max(p1, p2);
}
int query(int i, int j) { return _query(1, 0, n, i, j); }
void update(int i, int j, int val) { _update(1, 0, n, i, j, val); }
int main() {
  scanf("%d", &n);
  for (int i = 0; i < n; i++) scanf("%d", &v[i]);
  l[0] = -1;
  for (int i = 1; i < n; i++) {
    l[i] = i - 1;
    while (v[l[i]] >= v[i] && l[i] != -1) l[i] = l[l[i]];
  }
  r[n - 1] = -1;
  for (int i = n - 2; i >= 0; i--) {
    r[i] = i + 1;
    while (v[r[i]] >= v[i] && r[i] != -1) {
      r[i] = r[r[i]];
    }
  }
  for (int i = 0; i < n; i++) {
    int ri = r[i], li = l[i];
    if (ri == -1) ri = n;
    if (li == -1) li = -1;
    int segment_length = (ri - 1) - (li + 1) + 1;
    update(1, segment_length, v[i]);
  }
  bool first = true;
  for (int i = 1; i <= n; i++) {
    if (first)
      first = false;
    else
      printf(" ");
    printf("%d", query(i, i));
  }
  printf("\n");
  return 0;
}
