#include <bits/stdc++.h>
using namespace std;
inline void open(const char *s) {}
inline int rd() {
  static int x, f;
  x = 0;
  f = 1;
  char ch = getchar();
  for (; ch < '0' || ch > '9'; ch = getchar())
    if (ch == '-') f = -1;
  for (; ch >= '0' && ch <= '9'; ch = getchar()) x = x * 10 + ch - '0';
  return f > 0 ? x : -x;
}
const int N = 100010;
int n, top;
struct P {
  long long x, y;
  bool operator<(const P &ky) const {
    if (x != ky.x) return x < ky.x;
    return y < ky.y;
  }
} p[N], stk[N];
inline double slope(P a, P b) {
  if (a.x == b.x) return 1e30;
  return (double)(b.y - a.y) / (double)(b.x - a.x);
}
inline void gao() {
  int m = 0;
  sort(p + 1, p + n + 1);
  for (int i = 1; i <= n; i++)
    if ((i == n && p[i].x != p[i - 1].x) || p[i].x != p[i + 1].x) p[m++] = p[i];
  stk[(top = 1)] = p[0];
  for (int i = 1; i <= m - 1; i++) {
    for (; top > 1 &&
           slope(stk[top], p[i]) + (1e-9) >= slope(stk[top - 1], stk[top]);
         --top)
      ;
    stk[++top] = p[i];
  }
}
int main() {
  n = rd();
  for (int i = 1; i <= n; i++) {
    int x = rd(), y = rd();
    p[i].y = y - (long long)x * x;
    p[i].x = x;
  }
  gao();
  printf("%d", max(0, top - 1));
  return 0;
}
