#include <bits/stdc++.h>
using namespace std;
using LL = long long;
using GType = long long;
struct Point {
  GType x, y;
};
GType cross(const Point &p0, const Point &p1, const Point &p2) {
  return (p1.x - p0.x) * (p2.y - p0.y) - (p2.x - p0.x) * (p1.y - p0.y);
}
bool PointEqual(const Point &p1, const Point &p2) {
  return p1.x == p2.x && p1.y == p2.y;
}
class ConvexHull {
 public:
  ConvexHull(int _n) : n(_n), m(0), ch(_n) {}
  Point bp;
  int Solve() {
    int k = 0;
    for (int i = 0; i < n; ++i) {
      GType u = ch[i].x - ch[k].x;
      GType v = ch[i].y - ch[k].y;
      if (u < 0 || (u == 0 && v < 0)) k = i;
    }
    bp = ch[k];
    sort(ch.begin(), ch.end(), [&](const Point &p1, const Point &p2) {
      GType u = cross(bp, p1, p2);
      return u > 0 || (u == 0 && abs(bp.x - p1.x) < abs(bp.x - p2.x));
    });
    if (cross(ch[0], ch[1], ch[n - 1]) == 0) {
      m = n;
      return 0;
    }
    ch.push_back(ch[0]);
    ++n;
    int i = 1;
    for (int j = 2; j < n; ++j) {
      while (i > 0 && cross(ch[i - 1], ch[i], ch[j]) <= 0) --i;
      ch[++i] = ch[j];
    }
    m = i;
    return 1;
  }
  int n, m;
  vector<Point> ch;
};
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  int n;
  cin >> n;
  ConvexHull hull(n);
  for (int i = 0; i < n; ++i) {
    LL a, b;
    cin >> a >> b;
    b -= a * a;
    hull.ch[i] = {a, b};
  }
  if (n == 1) {
    cout << 0 << endl;
    return 0;
  }
  int t = hull.Solve();
  if (t == 0) {
    if (hull.ch[0].x == hull.ch[1].x) {
      cout << 0 << endl;
    } else {
      cout << 1 << endl;
    }
    return 0;
  }
  int ans = 0;
  for (int i = 0; i < hull.m; ++i) {
    if (hull.ch[i].x <= hull.ch[i + 1].x) continue;
    ++ans;
  }
  cout << ans << endl;
  return 0;
}
