#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e5 + 100;
const int mod = 998244353;
struct point {
  long long x, y;
  point(long long _x, long long _y) { x = _x, y = _y; }
  point() {}
  point operator+(const point &a) const { return point(x + a.x, y + a.y); }
  point operator-(const point &a) const { return point(x - a.x, y - a.y); }
  bool operator==(const point &a) const { return x == a.x && y == a.y; }
};
long long det(const point &a, const point &b) { return a.x * b.y - a.y * b.x; }
bool cmpless(const point &a, const point &b) {
  return a.x < b.x || a.x == b.x && a.y < b.y;
}
vector<point> tubao(vector<point> a) {
  vector<point> res(a.size() * 2 + 5);
  sort(a.begin(), a.end(), cmpless);
  a.erase(unique(a.begin(), a.end()), a.end());
  int m = 0;
  for (int i = 0; i < a.size(); ++i) {
    while (m > 1 && det(res[m - 1] - res[m - 2], a[i] - res[m - 2]) <= 0) m--;
    res[m++] = a[i];
  }
  int k = m;
  for (int i = (int)a.size() - 2; i >= 0; --i) {
    while (m > k && det(res[m - 1] - res[m - 2], a[i] - res[m - 2]) <= 0) m--;
    res[m++] = a[i];
  }
  res.resize(m);
  if (a.size() > 1) res.resize(m - 1);
  return res;
}
int main() {
  ios::sync_with_stdio(0), cin.tie(0);
  int n;
  cin >> n;
  vector<point> p;
  for (int i = 1; i <= n; ++i) {
    long long x, y;
    cin >> x >> y;
    y = y - x * x;
    p.push_back(point(x, y));
  }
  p = tubao(p);
  int ans = 0;
  for (int i = 0; i < p.size(); ++i) {
    int nx = (i + 1) % p.size();
    if (p[nx].x < p[i].x) ans++;
  }
  cout << ans << '\n';
  return 0;
}
