#include <bits/stdc++.h>
const int N = 1e5 + 5;
int n, st[N];
template <typename Tp>
struct Point {
  Tp x, y;
  Point(Tp _x = 0, Tp _y = 0) { x = _x, y = _y; }
  bool operator<(const Point &b) const { return x == b.x ? y > b.y : x < b.x; }
  Point operator+(const Point &b) const { return Point(x + b.x, y + b.y); }
  Point operator-(const Point &b) const { return Point(x - b.x, y - b.y); }
  Tp operator*(const Point &b) const { return x * b.x + y * b.y; }
  Tp operator^(const Point &b) const { return x * b.y - y * b.x; }
};
Point<long long> a[N];
template <typename Tp>
Tp cross(Point<Tp> a, Point<Tp> b, Point<Tp> x) {
  return (x - a) ^ (x - b);
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    scanf("%lld%lld", &a[i].x, &a[i].y);
    a[i].y -= a[i].x * a[i].x;
  }
  std::sort(a + 1, a + n + 1);
  int tp;
  st[tp = 1] = 1;
  for (int i = 2; i <= n; i++) {
    if (a[i].x == a[i - 1].x) continue;
    while (tp > 1 && cross(a[st[tp - 1]], a[st[tp]], a[i]) >= 0) tp--;
    st[++tp] = i;
  }
  printf("%d\n", tp - 1);
  return 0;
}
