#include <bits/stdc++.h>
using namespace std;
long long n, a1, a2, ans, top;
struct node {
  long long x, y;
} q[100005], s[100005];
long long gets() {
  long long v = 0;
  char ch;
  bool f = 0;
  while (!isdigit(ch = getchar()))
    if (ch == '-') f = 1;
  v = ch - 48;
  while (isdigit(ch = getchar())) v = (v << 1) + (v << 3) + ch - 48;
  return f ? -v : v;
}
bool cmp(const node &a, const node &b) {
  return a.x == b.x ? a.y > b.y : a.x < b.x;
}
long long vect(node p, node p1, node p2) {
  return (p1.x - p.x) * (p2.y - p.y) - (p1.y - p.y) * (p2.x - p.x);
}
void getupper() {
  for (int i = 1; i <= n; i++) {
    if (s[i].x == s[i - 1].x && i > 1) continue;
    while (top > 1 && vect(q[top - 1], q[top], s[i]) >= 0) top--;
    q[++top] = s[i];
  }
}
int main() {
  n = gets();
  for (int i = 1; i <= n; i++)
    a1 = gets(), a2 = gets(), s[i].x = a1, s[i].y = a2 - a1 * a1;
  sort(1 + s, 1 + s + n, cmp);
  getupper();
  cout << top - 1 << endl;
  return 0;
}
