#include <bits/stdc++.h>
using namespace std;
double read() {
  double x;
  scanf("%lf", &x);
  return x;
}
const int MAXN = 100000;
const double PI = acos(-1.0);
int dcmp(double x) {
  if (fabs(x) < (1e-9)) return 0;
  return x > 0 ? 1 : -1;
}
pair<int, int> operator-(pair<int, int> a, pair<int, int> b) {
  return make_pair(a.first - b.first, a.second - b.second);
}
map<int, int> M1, M2;
long long cross(pair<int, int> x, pair<int, int> y) {
  return 1ll * x.first * y.second - 1ll * x.second * y.first;
}
bool isInPoly(map<int, int> &Map, int x, int y) {
  if (x < Map.begin()->first || (--Map.end())->first < x) return 0;
  if (Map.count(x)) return Map[x] <= y;
  Map[x] = y;
  map<int, int>::iterator t = Map.lower_bound(x), i = t, j = t;
  i--, j++;
  Map.erase(x);
  return cross(*i - make_pair(x, y), *j - make_pair(x, y)) >= 0;
}
int cnt;
void Insert(map<int, int> &Map, int x, int y) {
  if (!Map.empty() && isInPoly(Map, x, y)) return;
  Map[x] = y;
  map<int, int>::iterator t = Map.lower_bound(x), i = t, j = i;
  if (i != Map.begin()) i--, j--;
  while (i != Map.begin()) {
    i--;
    if (cross(*j - make_pair(x, y), *i - make_pair(x, y)) >= 0) Map.erase(j);
    j = i;
  }
  i = j = t;
  i++, j++;
  if (i == Map.end()) return;
  while (++i != Map.end()) {
    if (cross(*j - make_pair(x, y), *i - make_pair(x, y)) <= 0) Map.erase(j);
    j = i;
  }
  return;
}
int main() {
  int n = read();
  for (int i = 1; i <= n; i++) {
    int tp = read(), x = read(), y = read();
    if (tp == 1) {
      Insert(M1, x, y);
      Insert(M2, x, -y);
    } else {
      if (isInPoly(M1, x, y) && isInPoly(M2, x, -y))
        puts("YES");
      else
        puts("NO");
    }
  }
  return 0;
}
