#include <bits/stdc++.h>
using namespace std;
const int maxn = 100010;
inline int read() {
  char ch = getchar();
  int x = 0, f = 0;
  while (ch < '0' || ch > '9') f |= ch == '-', ch = getchar();
  while (ch >= '0' && ch <= '9') x = x * 10 + ch - '0', ch = getchar();
  return f ? -x : x;
}
struct point {
  long long x, y;
  bool operator<(const point &p) const {
    if (x != p.x) return x > p.x;
    return y > p.y;
  }
  point operator-(const point &p) const { return (point){x - p.x, y - p.y}; }
} p[maxn], pp[maxn], stk[maxn];
int n, m, tp;
long long cross(point p1, point p2) { return p1.x * p2.y - p2.x * p1.y; }
int main() {
  n = read();
  for (int i = (1); i <= (n); i++)
    p[i].x = read(), p[i].y = read() - p[i].x * p[i].x;
  sort(p + 1, p + n + 1);
  pp[m = 1] = p[1];
  for (int i = (2); i <= (n); i++)
    if (p[i].x != p[i - 1].x) pp[++m] = p[i];
  for (int i = (1); i <= (m); i++) {
    while (tp > 1 && cross(stk[tp] - stk[tp - 1], pp[i] - stk[tp - 1]) <= 0)
      tp--;
    stk[++tp] = pp[i];
  }
  printf("%d\n", tp - 1);
}
