#include <bits/stdc++.h>
using namespace std;
const double EPS = 1e-9;
long long det(pair<long long, long long> x, pair<long long, long long> y) {
  return x.first * y.second - x.second * y.first;
}
pair<long long, long long> sub(pair<long long, long long> x,
                               pair<long long, long long> y) {
  return pair<long long, long long>(x.first - y.first, x.second - y.second);
}
vector<pair<long long, long long> > Convex_Hull(
    vector<pair<long long, long long> >& p) {
  long long n = p.size(), k = 0;
  sort(p.begin(), p.end());
  vector<pair<long long, long long> > q(2 * n);
  for (long long i = (0); i < (n); i++) {
    while (k > 1 && det(sub(q[k - 1], q[k - 2]), sub(p[i], q[k - 1])) >= 0) k--;
    q[k++] = p[i];
  }
  q.resize(k);
  return q;
}
signed main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  long long n;
  cin >> n;
  map<long long, long long> mp;
  for (long long i = (0); i < (n); i++) {
    long long x, y;
    cin >> x >> y;
    if (!mp.count(x))
      mp[x] = y - x * x;
    else
      mp[x] = max(mp[x], y - x * x);
  }
  vector<pair<long long, long long> > point;
  for (auto itr = (mp).begin(); itr != (mp).end(); ++itr)
    point.push_back(pair<long long, long long>(itr->first, itr->second));
  vector<pair<long long, long long> > tmp = Convex_Hull(point);
  cout << tmp.size() - 1 << endl;
  return 0;
}
