#include <bits/stdc++.h>
using namespace std;
char getc() {
  char c = getchar();
  while ((c < 'A' || c > 'Z') && (c < 'a' || c > 'z') && (c < '0' || c > '9'))
    c = getchar();
  return c;
}
int gcd(int n, int m) { return m == 0 ? n : gcd(m, n % m); }
int read() {
  int x = 0, f = 1;
  char c = getchar();
  while (c < '0' || c > '9') {
    if (c == '-') f = -1;
    c = getchar();
  }
  while (c >= '0' && c <= '9')
    x = (x << 1) + (x << 3) + (c ^ 48), c = getchar();
  return x * f;
}
int n, m, q[100010], tail;
struct data {
  long long x, y;
  bool operator<(const data& a) const { return x < a.x || x == a.x && y > a.y; }
  data operator-(const data& a) const { return (data){x - a.x, y - a.y}; }
  long long operator*(const data& a) const { return x * a.y - y * a.x; }
} a[100010], b[100010];
signed main() {
  n = read();
  for (int 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);
  for (int i = 1; i <= n; i++) {
    int t = i;
    while (a[t + 1].x == a[i].x) t++;
    b[++m] = a[i];
    i = t;
  }
  memcpy(a, b, sizeof(a));
  n = m;
  q[1] = 1;
  int tail = 1;
  for (int i = 2; i <= n; i++) {
    while (tail > 1 &&
           (a[i] - a[q[tail - 1]]) * (a[q[tail]] - a[q[tail - 1]]) <= 0)
      tail--;
    q[++tail] = i;
  }
  cout << tail - 1;
  return 0;
}
