#include <bits/stdc++.h>
using namespace std;
struct Vec {
  long long x, y;
  Vec(long long x = 0, long long y = 0) : x(x), y(y) {}
  Vec operator+(const Vec &rhs) const { return Vec(x + rhs.x, y + rhs.y); }
  Vec operator-() const { return Vec(-x, -y); }
  Vec operator-(const Vec &rhs) const { return *this + -rhs; }
  long long operator*(const Vec &rhs) const { return x * rhs.y - y * rhs.x; }
  bool operator<(const Vec &rhs) const {
    if (x < rhs.x) return true;
    if (rhs.x < x) return false;
    return y > rhs.y;
  }
};
const int N = 100010;
int n;
Vec a[N], stk[N];
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; ++i) {
    int x, y;
    scanf("%d%d", &x, &y);
    a[i] = Vec(x, y - x * (long long)x);
  }
  sort(a + 1, a + n + 1);
  int r = 0;
  a[0].x = numeric_limits<long long>::max();
  for (int i = 1; i <= n; ++i) {
    if (a[i].x == a[i - 1].x && a[i].y < a[i - 1].y) continue;
    while (r > 1 && (stk[r] - stk[r - 1]) * (a[i] - stk[r]) >= 0) --r;
    stk[++r] = a[i];
  }
  printf("%d\n", r - 1);
  return 0;
}
