#include <bits/stdc++.h>
using namespace std;
const int inf = 2 * (1e9) + 10;
const long long infl = 2 * (1e18) + 10;
const long long MOD = 998244353;
const long NMAX = 300005;
const int dx[] = {-1, 0, 1, 0};
const int dy[] = {0, 1, 0, -1};
int n;
map<long long, long long> m;
long long inx[NMAX], iny[NMAX];
long double slope(pair<long long, long long> A, pair<long long, long long> B) {
  return 1.0L * (B.second - A.second) / (B.first - A.first);
}
int main() {
  cin >> n;
  for (int i = 1; i <= n; ++i) {
    cin >> inx[i];
    cin >> iny[i];
    if (m.find(inx[i]) != m.end())
      m[inx[i]] = max(m[inx[i]], iny[i]);
    else
      m[inx[i]] = iny[i];
  }
  vector<pair<long long, long long>> hull;
  for (auto constel : m) {
    pair<long long, long long> el = constel;
    el.second -= el.first * el.first;
    while (hull.size() > 1) {
      pair<long long, long long> prev, preprev;
      prev = hull[hull.size() - 1];
      preprev = hull[hull.size() - 2];
      if (slope(prev, el) >= slope(preprev, el))
        hull.pop_back();
      else
        break;
    }
    hull.push_back(el);
  }
  cout << hull.size() - 1;
  return 0;
}
