#include <bits/stdc++.h>
using namespace std;
const int inf = 1e9 + 5;
const long long linf = 1e18 + 5;
class point {
 public:
  int x, y;
  double m;
  point() {}
  point(int x, int y) {
    this->x = x;
    this->y = y;
    this->m = atan2(y, x);
  }
  bool operator<(point other) const { return m < other.m; }
  bool operator==(point other) const {
    return x == other.x and y == other.y and m == other.m;
  }
};
int n, c, x, y, sumx, sumy;
pair<int, int> a[5];
set<point> s;
long long ccw(point a, point c, point b) {
  pair<int, int> v1 = make_pair(c.x - a.x, c.y - a.y);
  pair<int, int> v2 = make_pair(b.x - a.x, b.y - a.y);
  return (long long)v1.first * v2.second - (long long)v1.second * v2.first;
}
set<point>::iterator something_stupid_(point x) {
  set<point>::iterator it = s.lower_bound(x);
  if (it == s.end()) it = s.begin();
  return it;
}
set<point>::iterator something_stupid_(set<point>::iterator it) {
  it++;
  if (it == s.end()) it = s.begin();
  return it;
}
set<point>::iterator _something_stupid(set<point>::iterator it) {
  if (it == s.begin()) {
    it = s.end();
    it--;
  } else
    it--;
  return it;
}
int main() {
  ios ::sync_with_stdio(0);
  cin >> n;
  for (int i = 1; i <= 3; i++) {
    cin >> c >> a[i].first >> a[i].second;
    sumx += a[i].first;
    sumy += a[i].second;
  }
  pair<int, int> cent = make_pair(sumx, sumy);
  for (int i = 1; i <= 3; i++) {
    a[i].first *= 3;
    a[i].second *= 3;
    a[i].first -= cent.first;
    a[i].second -= cent.second;
    point t(a[i].first, a[i].second);
    s.insert(t);
  }
  for (int i = 4; i <= n; i++) {
    cin >> c >> x >> y;
    x *= 3;
    y *= 3;
    x -= cent.first;
    y -= cent.second;
    point t(x, y);
    if (c == 1) {
      set<point>::iterator left = something_stupid_(t);
      set<point>::iterator right = _something_stupid(left);
      if (ccw(*left, *right, t) <= 0) continue;
      while (s.size() >= 2 and ccw(t, *left, *something_stupid_(left)) <= 0) {
        set<point>::iterator it = left;
        left = something_stupid_(left);
        s.erase(it);
      }
      right = _something_stupid(left);
      while (s.size() >= 2 and ccw(t, *right, *_something_stupid(right)) >= 0) {
        set<point>::iterator it = right;
        right = _something_stupid(right);
        s.erase(it);
      }
      s.insert(t);
    } else {
      set<point>::iterator left = something_stupid_(t);
      set<point>::iterator right = _something_stupid(left);
      if (ccw(*left, *right, t) <= 0)
        cout << "YES" << '\n';
      else
        cout << "NO" << '\n';
    }
  }
  return 0;
}
