#include <bits/stdc++.h>
using namespace std;
const int maxN = 200042, maxTS = 1 << 19;
template <typename T>
struct Point {
  T x, y;
  Point(T a = 0, T b = 0) : x(a), y(b) {}
  T operator%(const Point& he) const { return x * he.y - he.x * y; }
  Point operator-(const Point& he) { return Point(x - he.x, y - he.y); }
  T len2() const { return x * x + y * y; }
  bool operator<(const Point& he) const {
    T ilo = (*this) % he;
    if (ilo != 0) return ilo > 0;
    if (y != 0) return y < he.y;
    return x < llabs(he.x);
  }
  static vector<Point> convex(vector<Point>& P) {
    Point mv = P[0];
    for (int i = (1); i < (int)(P.size()); i++)
      if (P[i].y < mv.y or (P[i].y == mv.y and P[i].x < mv.x)) mv = P[i];
    for (int i = (0); i < (int)(P.size()); i++) P[i] = P[i] - mv;
    sort((P).begin(), (P).end());
    vector<Point> res;
    res.push_back(P[0]);
    for (int i = (1); i < (int)(P.size()); i++) {
      while (res.size() > 1 and (res[res.size() - 1] - res[res.size() - 2]) %
                                        (P[i] - res[res.size() - 2]) <=
                                    0)
        res.pop_back();
      res.push_back(P[i]);
    }
    return res;
  }
};
vector<Point<long long> > P;
void getPoints() {
  map<int, int> maxy;
  int n;
  scanf("%d", &n);
  for (int i = (0); i < (int)(n); i++) {
    int a, b;
    scanf("%d%d", &a, &b);
    auto it = maxy.find(a);
    if (it == maxy.end() or it->second < b) maxy[a] = b;
  }
  for (auto it : maxy) P.push_back({it.first, it.second});
  for (int i = (0); i < (int)(P.size()); i++) P[i].y -= P[i].x * P[i].x;
}
void ans(int x) {
  printf("%d\n", x);
  exit(0);
}
int main() {
  getPoints();
  if (P.size() == 1) ans(0);
  if (P.size() == 2) ans(1);
  vector<Point<long long> > conv = Point<long long>::convex(P);
  if (conv.size() == 2) ans(1);
  int a, b;
  conv.insert(conv.begin(), conv.back());
  conv.push_back(conv[1]);
  for (int i = (1); i < (int)(conv.size() - 1); i++) {
    if (conv[i - 1].x < conv[i].x and conv[i + 1].x < conv[i].x) b = i;
    if (conv[i - 1].x > conv[i].x and conv[i + 1].x > conv[i].x) a = i;
  }
  if (a < b) a += conv.size() - 2;
  int res = a - b;
  printf("%d\n", res);
  return 0;
}
