#include <bits/stdc++.h>
using namespace std;
inline int gi() {
  int data = 0, fu = 1;
  char ch = 0;
  while (ch != '-' && (ch < '0' || ch > '9')) ch = getchar();
  if (ch == '-') fu = -1, ch = getchar();
  while ('0' <= ch && ch <= '9')
    data = (data << 1) + (data << 3) + (ch ^ 48), ch = getchar();
  return data * fu;
}
int n, nq, q[200005];
map<long long, long long> M;
struct Node {
  long long x, y;
} p[200005];
const long double eps = 1e-8;
inline long double Slope(int i, int j) {
  return (long double)(p[i].y - p[j].y) / (long double)(p[i].x - p[j].x);
}
inline bool cmp(Node a, Node b) { return a.x ^ b.x ? a.x < b.x : a.y < b.y; }
int main() {
  n = gi();
  for (long long i = 1, x, y; i <= n; ++i) {
    x = gi(), y = gi();
    y -= x * x;
    if (M.find(x) == M.end()) M[x] = -1e18;
    M[x] = max(M[x], y);
  }
  n = 0;
  for (map<long long, long long>::iterator it = M.begin(); it != M.end();
       it++) {
    long long X = it->first, Y = it->second;
    long long i;
    p[i = ++n].x = X, p[i].y = Y;
  }
  sort(p + 1, p + n + 1, cmp);
  nq = 0;
  for (long long i = 1; i <= n; ++i) {
    while (nq >= 2 &&
           Slope(q[nq - 1], q[nq]) - eps <= Slope(q[nq - 1], i) + eps)
      --nq;
    q[++nq] = i;
  }
  cout << nq - 1 << endl;
  return 0;
}
