#include <bits/stdc++.h>
using namespace std;
int n, top;
struct dot {
  long long x, y;
  dot(long long _x = 0, long long _y = 0) { x = _x, y = _y; }
} a[200100], sta[200100];
bool cmp(dot a, dot b) { return a.x < b.x; }
dot operator-(dot a, dot b) { return dot(a.x - b.x, a.y - b.y); }
long long ctime(dot a, dot b) { return a.x * b.y - a.y * b.x; }
void convex() {
  sort(a + 1, a + n + 1, cmp);
  for (int i = 1, _ = n; i <= _; ++i)
    if (i == 1)
      n = 1;
    else if (a[i].x == a[n].x)
      a[n].y = max(a[i].y, a[n].y);
    else
      a[++n] = a[i];
  for (int i = 1; i <= n; ++i) {
    while (top > 1 && ctime(sta[top - 1] - sta[top], a[i] - sta[top]) <= 0)
      --top;
    sta[++top] = a[i];
  }
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; ++i) {
    int x, y;
    scanf("%d %d", &x, &y);
    a[i] = dot(x, y - 1ll * x * x);
  }
  convex();
  printf("%d", top - 1);
}
