#include <bits/stdc++.h>
using namespace std;
template <class T>
bool tomin(T &x, T y) {
  return x > y ? x = y, 1 : 0;
}
template <class T>
bool tomax(T &x, T y) {
  return x < y ? x = y, 1 : 0;
}
template <class T>
void read(T &x) {
  char c;
  x = 0;
  int f = 1;
  while (c = getchar(), c < '0' || c > '9')
    if (c == '-') f = -1;
  do x = (x << 3) + (x << 1) + (c ^ 48);
  while (c = getchar(), c >= '0' && c <= '9');
  x *= f;
}
const double Pi = acos(-1);
const int maxn = 1e5 + 5;
const int V = 1e6;
const long long Inf = -1e18;
int n;
long long X[V + V + 5];
struct node {
  long long x, y;
} stk[maxn];
int top = -1;
bool Check(node A, node B, node C) {
  return (B.y - A.y) * (C.x - B.x) <= (C.y - B.y) * (B.x - A.x);
}
int main() {
  srand(time(NULL));
  read(n);
  int x, y;
  for (int i = 0, i_ = V + V; i <= i_; ++i) X[i] = Inf;
  for (int i = 1, i_ = n; i <= i_; ++i) {
    read(x), read(y);
    tomax(X[x + V], (long long)y - (long long)x * x);
  }
  for (int x = 0, x_ = V + V; x <= x_; ++x)
    if (X[x] != Inf) {
      node tmp = (node){(long long)x, X[x]};
      while (top > 0 && Check(stk[top - 1], stk[top], tmp)) top--;
      stk[++top] = tmp;
    }
  printf("%d", top);
  return 0;
}
