#include <bits/stdc++.h>
using namespace std;
using ll = long long;
istream &operator>>(istream &in, __int128 &x) {
  ll value;
  in >> value;
  x = value;
  return in;
}
struct Point {
  __int128 x, y;
  Point() : x(0), y(0) {}
  Point(ll x, ll y) : x(x), y(y) {}
  Point(Point a, Point b) : x(b.x - a.x), y(b.y - a.y) {}
  ll sqrLength() { return x * x + y * y; }
  bool operator<(Point point) const {
    return x < point.x || (x == point.x && y > point.y);
  }
  ll operator%(Point point) const { return x * point.y - y * point.x; }
  friend istream &operator>>(istream &in, Point &point) {
    return in >> point.x >> point.y;
  }
};
signed main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
  int n;
  cin >> n;
  vector<Point> points(n);
  for (auto &point : points) cin >> point;
  for (auto &point : points) point.y -= point.x * point.x;
  sort((points).begin(), (points).end());
  vector<Point> hull;
  hull.reserve(n);
  hull.emplace_back(points[0]);
  for (int i = 1; i < n; i++) {
    while (int(hull.size()) > 1 && Point(hull.end()[-2], hull.end()[-1]) %
                                           Point(hull.end()[-2], points[i]) >=
                                       0)
      hull.pop_back();
    if (hull.back().x != points[i].x) hull.emplace_back(points[i]);
  }
  cout << int(hull.size()) - 1 << '\n';
}
