#include <bits/stdc++.h>
using namespace std;
const long long inf = 0x3f3f3f3f3f3f3f3f;
const int mod = 998244353;
const int maxn = 1e6 + 4;
const int N = 5e3 + 5;
const double eps = 1e-6;
const double pi = acos(-1.0);
long long qpow(long long x, long long y, long long mod) {
  long long ans = 1;
  x %= mod;
  while (y) {
    if (y & 1) ans = ans * x % mod;
    x = x * x % mod;
    y >>= 1;
  }
  return ans;
}
int n, top = 1;
struct Point {
  long long x, y;
} a[maxn];
Point operator+(Point a, Point b) { return (Point){a.x + b.x, a.y + b.y}; }
Point operator-(Point a, Point b) { return (Point){a.x - b.x, a.y - b.y}; }
Point operator*(Point a, long long b) { return (Point){a.x * b, a.y * b}; }
long long operator*(Point a, Point b) { return a.x * b.y - a.y * b.x; }
bool operator<(Point a, Point b) {
  if (a.x != b.x) return a.x < b.x;
  return a.y < b.y;
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    scanf("%lld%lld", &a[i].x, &a[i].y);
    a[i].y = a[i].y - a[i].x * a[i].x;
  }
  sort(a + 1, a + 1 + n);
  for (int i = 2; i <= n; i++) {
    if (a[top].x == a[i].x) top--;
    while (top >= 2 && (a[top] - a[top - 1]) * (a[i] - a[top - 1]) >= 0) top--;
    a[++top] = a[i];
  }
  printf("%d\n", top - 1);
}
