#include <bits/stdc++.h>
using namespace std;
const int maxx = 2e5 + 1314;
struct point {
  long long x, y;
} A[maxx];
int stk[maxx], top;
int n, m;
int read() {
  int k;
  scanf("%d", &k);
  return k;
}
bool my(point A, point B) { return A.x < B.x || A.x == B.x && A.y < B.y; }
const int inf = 1 << 30;
double pd(int a, int b) {
  if (A[a].x == A[b].x) return inf;
  return 1.0 * (A[a].y - A[b].y) / (A[a].x - A[b].x);
}
int main() {
  n = read();
  for (int i = 1; i <= n; i++) {
    long long x = read();
    long long y = read();
    A[i].x = x;
    A[i].y = y - x * x;
  }
  sort(A + 1, A + 1 + n, my);
  for (int i = 1; i <= n; i++) {
    if (A[i].x == A[i + 1].x) continue;
    while (top >= 2 && pd(i, stk[top]) >= pd(stk[top], stk[top - 1])) top--;
    stk[++top] = i;
  }
  cout << top - 1 << endl;
  return 0;
}
