#include <bits/stdc++.h>
using namespace std;
template <class T>
struct RMQ {
  vector<vector<T>> jmp;
  RMQ(const vector<T>& V) : jmp(1, V) {
    for (int pw = 1, k = 1; pw * 2 <= (int)V.size(); pw *= 2, ++k) {
      jmp.emplace_back((int)V.size() - pw * 2 + 1);
      for (int j = 0; j < ((int)jmp[k].size()); ++j)
        jmp[k][j] = max(jmp[k - 1][j], jmp[k - 1][j + pw]);
    }
  }
  T query(int a, int b) {
    assert(a < b);
    int dep = 31 - __builtin_clz(b - a);
    return max(jmp[dep][a], jmp[dep][b - (1 << dep)]);
  }
};
int main() {
  cin.tie(0);
  cin.sync_with_stdio(0);
  int n;
  cin >> n;
  vector<int> a(3 * n);
  int mx = -1, mn = INT_MAX;
  for (int i = 0; i < n; ++i) {
    cin >> a[i];
    a[n + i] = a[i];
    a[2 * n + i] = a[i];
    mx = max(mx, a[i]);
    mn = min(mn, a[i]);
  }
  RMQ<int> rmq(a);
  if (2 * mn >= mx) {
    for (int i = 0; i < n; ++i) cout << -1 << " ";
    cout << endl;
    return 0;
  }
  int ret[n];
  mx = a[0];
  for (int i = 0; i < 3 * n; ++i) {
    mx = max(mx, a[i]);
    if (2 * a[i] < mx) {
      ret[0] = i;
      break;
    }
  }
  int mnpos = ret[0];
  for (int i = 1; i < n; ++i) {
    int r = rmq.query(i, mnpos + 1);
    if (r > 2 * a[mnpos]) {
      ret[i] = mnpos - i;
    } else {
      mx = r;
      for (int j = mnpos; j < 3 * n; ++j) {
        mx = max(mx, a[j]);
        if (2 * a[j] < mx) {
          mnpos = j;
          break;
        }
      }
      ret[i] = mnpos - i;
    }
  }
  for (int i = 0; i < n; ++i) {
    cout << ret[i] << " ";
  }
  cout << endl;
}
