#include <bits/stdc++.h>
using namespace std;
const int maxn = 100005;
inline int read() {
  int ret, f = 1;
  char c;
  while ((c = getchar()) && (c < '0' || c > '9'))
    if (c == '-') f = -1;
  ret = c - '0';
  while ((c = getchar()) && (c >= '0' && c <= '9'))
    ret = (ret << 3) + (ret << 1) + c - '0';
  return ret * f;
}
int n, stak[maxn], top;
struct node {
  long long fir, sec;
  node() {}
  node(long long x, long long y) {
    fir = x;
    sec = y;
  }
} a[maxn];
node operator-(node x, node y) { return node(x.fir - y.fir, x.sec - y.sec); }
long long crp(node x, node y) { return x.fir * y.sec - x.sec * y.fir; }
bool cmp(node x, node y) {
  return x.fir == y.fir ? x.sec > y.sec : x.fir < y.fir;
}
int main() {
  n = read();
  for (int i = 1; i <= n; ++i) {
    a[i].fir = read();
    a[i].sec = read();
    a[i].sec -= a[i].fir * a[i].fir;
  }
  sort(a + 1, a + n + 1, cmp);
  for (int i = 1; i <= n; ++i) {
    if (i > 1 && a[i].fir == a[i - 1].fir) continue;
    while (top > 1 &&
           crp(a[i] - a[stak[top - 1]], a[stak[top]] - a[stak[top - 1]]) <= 0)
      --top;
    stak[++top] = i;
  }
  printf("%d", top - 1);
  return 0;
}
