#include <bits/stdc++.h>
using namespace std;
inline char gc() {
  static char buf[100000], *p1 = buf, *p2 = buf;
  return p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 100000, stdin), p1 == p2)
             ? EOF
             : *p1++;
}
inline long long read() {
  long long x = 0;
  char ch = getchar();
  bool positive = 1;
  for (; !isdigit(ch); ch = getchar())
    if (ch == '-') positive = 0;
  for (; isdigit(ch); ch = getchar()) x = x * 10 + ch - '0';
  return positive ? x : -x;
}
inline void write(long long a) {
  if (a < 0) {
    a = -a;
    putchar('-');
  }
  if (a >= 10) write(a / 10);
  putchar('0' + a % 10);
}
inline void writeln(long long a) {
  write(a);
  puts("");
}
inline void wri(long long a) {
  write(a);
  putchar(' ');
}
const int N = 100005;
pair<long long, long long> a[N], q[N];
int top;
int main() {
  int n = read();
  for (int i = 1; i <= n; i++) {
    a[i].first = read();
    a[i].second = read();
    a[i].second -= a[i].first * a[i].first;
  }
  sort(&a[1], &a[n + 1]);
  for (int i = 1; i <= n; i++) {
    while (top >= 2 &&
           (q[top].second - q[top - 1].second) * (a[i].first - q[top].first) <=
               (a[i].second - q[top].second) *
                   (q[top].first - q[top - 1].first))
      top--;
    while (top >= 1 && a[i].first == q[top].first) top--;
    q[++top] = a[i];
  }
  cout << top - 1 << endl;
}
