#include <bits/stdc++.h>
using namespace std;
template <typename V>
bool tomax(V& x, V y) {
  if (x < y) {
    x = y;
    return true;
  }
  return false;
}
template <typename V>
bool tomin(V& x, V y) {
  if (y < x) {
    x = y;
    return true;
  }
  return false;
}
const int M = 1e5 + 5;
int n, top;
struct node {
  long long x, y;
  bool operator<(const node& _) const {
    if (x != _.x) return x < _.x;
    return y < _.y;
  }
  friend ostream& operator<<(ostream& os, node T) {
    return os << "(" << T.x << "," << T.y << ")";
  }
} P[M], stk[M];
bool inc(node A, node B, node C) {
  return (B.y - A.y) * (C.x - B.x) > (C.y - B.y) * (B.x - A.x);
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    scanf("%lld%lld", &P[i].x, &P[i].y);
    P[i].y -= P[i].x * P[i].x;
  }
  sort(P + 1, P + 1 + n);
  for (int i = 1; i <= n; i++) {
    if (i != n && P[i].x == P[i + 1].x) continue;
    while (top > 1 && !inc(stk[top - 1], stk[top], P[i])) --top;
    stk[++top] = P[i];
  }
  printf("%d\n", top - 1);
  return 0;
}
