#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e5 + 10;
struct Point {
  Point(long long _x = 0, long long _y = 0) : x(_x), y(_y) {}
  void Input() { scanf("%lld%lld", &x, &y); }
  Point operator-(const Point p) const { return Point(x - p.x, y - p.y); }
  bool operator<(const Point p) const {
    return (x < p.x || (x == p.x && y < p.y));
  }
  long long x, y;
};
long long Cross(Point p1, Point p2) { return p1.x * p2.y - p1.y * p2.x; }
int n, m;
Point f[MAXN], g[MAXN];
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    f[i].Input();
    f[i].y -= f[i].x * f[i].x;
  }
  sort(f + 1, f + n + 1);
  int p = 1;
  for (int i = 1; i <= n; i++) {
    if (f[i].x == f[1].x) {
      p = i;
    } else {
      break;
    }
  }
  int len = 1;
  for (int i = p; i <= n; i++) {
    while (len >= 3 && Cross(g[len - 1] - g[len - 2], f[i] - g[len - 2]) >= 0) {
      len--;
    }
    g[len] = f[i];
    len++;
  }
  printf("%d\n", len - 2);
  return 0;
}
