#include <bits/stdc++.h>
using namespace std;
inline long long read() {
  long long neg = 1, num = 0;
  char c = getchar();
  for (; !isdigit(c); c = getchar())
    if (c == '-') neg = -1;
  for (; isdigit(c); c = getchar()) num = (num << 1) + (num << 3) + c - '0';
  return neg * num;
}
struct node {
  long long x, y;
} A[100010], s[100010];
;
long long n, top;
inline long long cross(node a, node b) { return a.x * b.y - a.y * b.x; }
inline node operator-(node a, node b) {
  node res;
  res.x = a.x - b.x;
  res.y = a.y - b.y;
  return res;
}
inline bool cmp(node a, node b) {
  if (a.x != b.x)
    return a.x < b.x;
  else
    return a.y > b.y;
}
signed main() {
  n = read();
  for (long long i = 1; i <= n; i++)
    A[i].x = read(), A[i].y = read() - A[i].x * A[i].x;
  sort(A + 1, A + n + 1, cmp);
  for (long long i = 1; i <= n; i++) {
    if (A[i].x == A[i - 1].x) continue;
    while (top >= 2 && cross(s[top] - s[top - 1], A[i] - s[top]) >= 0) top--;
    s[++top] = A[i];
  }
  printf("%lld", (top - 1) >= 0 ? top - 1 : 0);
  return 0;
}
