#include <bits/stdc++.h>
using namespace std;
const long long mod = 1e9;
const long long maxn = 2e5 + 123;
std::vector<pair<long long, pair<long long, long long>>> ve[maxn];
std::vector<pair<long long, long long>> v[maxn];
std::vector<int> nxt[maxn];
struct point {
  long long x, y;
} po1[maxn], po2[maxn], po3[maxn];
int go(point a, point b, point c) {
  if ((a.y - b.y) * (a.x - c.x) <= (a.y - c.y) * (a.x - b.x)) {
    return 1;
  } else {
    return 0;
  }
}
int cmp(point a, point b) {
  if (a.x < b.x)
    return 1;
  else
    return 0;
}
vector<point> ans;
int main(int argc, char const *argv[]) {
  int n;
  std::cin >> n;
  for (int i = 1; i <= n; i++) {
    long long x, y;
    std::cin >> x >> y;
    po1[i].x = x;
    po1[i].y = y - x * x;
  }
  sort(po1 + 1, po1 + 1 + n, cmp);
  int num = 1;
  po2[1] = po1[1];
  for (int i = 2; i <= n; i++) {
    if (po1[i].x != po2[num].x) {
      num++;
      po2[num] = po1[i];
    } else {
      po2[num].y = max(po1[i].y, po2[num].y);
    }
  }
  for (int i = 1; i <= num; i++) {
    po1[i] = po2[i];
  }
  if (num == 1) {
    std::cout << "0" << '\n';
    exit(0);
  } else {
    for (int i = 1; i <= 2; i++) {
      ans.push_back(po1[i]);
    }
    for (int i = 3; i <= num; i++) {
      while (go(ans[(int)ans.size() - 2], ans.back(), po1[i]) == 1 &&
             (int)ans.size() >= 2) {
        ans.pop_back();
      }
      ans.push_back(po1[i]);
    }
  }
  std::cout << (int)ans.size() - 1 << '\n';
  return 0;
}
