#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e5 + 10;
const long long MOD = 1e9 + 7;
int N, M, K, Q;
map<int, vector<int>> deli;
set<int> idx;
pair<int, int> A[2 * MAXN];
vector<int> vec;
int R[MAXN];
multiset<int> F;
int main() {
  int i, j;
  scanf("%d", &N);
  for (i = 1; i <= N; ++i) {
    scanf("%d", &A[i].first);
    A[i].second = i;
    A[i + N] = A[i];
    A[i + N].second = i + N;
    deli[A[i].first].push_back(i);
    deli[A[i].first].push_back(i + N);
    idx.insert(i);
    idx.insert(i + N);
  }
  sort(A + 1, A + 1 + N);
  for (i = 1; i <= N; ++i) vec.push_back(A[i].first);
  vec.erase(unique(vec.begin(), vec.end()), vec.end());
  for (i = N; i >= 1; --i) {
    int a = A[i].first;
    while (vec.size() && 2 * vec.back() >= a) {
      auto &v = deli[vec.back()];
      vec.pop_back();
      for (j = 0; j < v.size(); ++j) {
        idx.erase(v[j]);
      }
    }
    auto it = idx.upper_bound(A[i].second);
    if (it == idx.end())
      R[A[i].second] = 0x3f3f3f3f;
    else {
      R[A[i].second] = (*it) - 1;
      F.insert(R[A[i].second]);
      F.insert(R[A[i].second] + N);
    }
  }
  if (F.empty()) {
    for (i = 1; i <= N; ++i) printf("-1 ");
    return 0;
  }
  for (i = 1; i <= N; ++i) {
    auto it = F.lower_bound(i);
    j = *it;
    if (R[i] != 0x3f3f3f3f) {
      F.erase(F.find(R[i]));
    }
    printf("%d ", j - i + 1);
  }
  return 0;
}
