#include <bits/stdc++.h>
using namespace std;
vector<pair<double, double>> vec;
map<double, double> val;
map<double, bool> in;
bool conup(pair<double, double> p1, pair<double, double> p2,
           pair<double, double> p3) {
  return p1.second + (p3.second - p1.second) / (p3.first - p1.first) *
                         (p2.first - p1.first) <=
         p2.second;
}
bool conup2(pair<double, double> p1, pair<double, double> p2,
            pair<double, double> p3) {
  return p1.second + (p3.second - p1.second) / (p3.first - p1.first) *
                         (p2.first - p1.first) <
         p2.second;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  int n;
  cin >> n;
  for (int i = 0; i < n; i++) {
    double x, y;
    cin >> x >> y;
    if (in[x]) {
      val[x] = max(val[x], y);
    } else {
      in[x] = 1;
      val[x] = y;
    }
  }
  for (auto p : val) {
    vec.push_back({p.first, p.second - p.first * p.first});
  }
  sort(vec.begin(), vec.end());
  if (vec.size() <= 1) {
    cout << 0;
    return 0;
  }
  vector<pair<double, double>> up;
  up.push_back(vec[0]);
  up.push_back(vec[1]);
  for (int i = 2; i < vec.size(); i++) {
    if (i == vec.size() - 1 || conup(up.back(), vec[i], vec.back())) {
      while (up.size() >= 2 &&
             !conup2(up[up.size() - 2], up[up.size() - 1], vec[i]))
        up.pop_back();
      up.push_back(vec[i]);
    }
  }
  cout << up.size() - 1;
}
