#include <bits/stdc++.h>
using namespace std;
mt19937 rng32(chrono::steady_clock::now().time_since_epoch().count());
long long modExpo(long long x, long long n) {
  if (n == 0)
    return 1;
  else if (n % 2 == 0)
    return modExpo((x * x) % 998244353, n / 2);
  else
    return (x * modExpo((x * x) % 998244353, (n - 1) / 2)) % 998244353;
}
long long modInverse(long long n) { return modExpo(n, 1000000007 - 2); }
long long n, m, k, ar[100010];
string s, s1;
vector<pair<long long, long long> > hull;
bool is_left(pair<long long, long long> p1, pair<long long, long long> p2,
             pair<long long, long long> p3) {
  long long t = (p2.first - p1.first) * (p3.second - p2.second) -
                (p2.second - p1.second) * (p3.first - p2.first);
  if (t >= 0)
    return true;
  else
    return false;
}
void check() {
  if (hull.size() <= 2) return;
  auto it = hull.end();
  auto it1 = prev(it, 1);
  auto it2 = prev(it, 2);
  auto it3 = prev(it, 3);
  while (hull.size() > 2 && is_left(*it3, *it2, *it1)) {
    hull.erase(it2);
    it = hull.end();
    it1 = prev(it, 1);
    it2 = prev(it, 2);
    it3 = prev(it, 3);
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  int ti = 1;
  while (ti--) {
    vector<pair<long long, long long> > v;
    cin >> n;
    for (long long i = 0; i < n; i++) {
      long long x, y;
      cin >> x >> y;
      y = y - x * x;
      v.push_back(make_pair(x, y));
    }
    sort(v.begin(), v.end());
    for (long long i = 0; i < n; i++) {
      hull.push_back(v[i]);
      check();
    }
    long long cnt = 0;
    for (long long i = 1; i < hull.size(); i++)
      if (hull[i].first != hull[i - 1].first) cnt++;
    cout << cnt;
  }
  return 0;
}
