#include <bits/stdc++.h>
int n;
std::map<int, int> mp1, mp2;
template <typename Tp>
struct Point {
  Tp x, y;
  Point(Tp _x = 0, Tp _y = 0) { x = _x, y = _y; }
  Point operator+(const Point &b) const { return Point(x + b.x, y + b.y); }
  Point operator-(const Point &b) const { return Point(x - b.x, y - b.y); }
  Tp operator*(const Point &b) const { return x * b.x + y * b.y; }
  Tp operator^(const Point &b) const { return x * b.y - y * b.x; }
};
template <typename Tp>
Tp cross(Point<Tp> a, Point<Tp> b, Point<Tp> x) {
  return (x - a) ^ (x - b);
}
std::map<int, int>::iterator Last(std::map<int, int>::iterator x) {
  return --x;
}
std::map<int, int>::iterator Next(std::map<int, int>::iterator x) {
  return ++x;
}
template <typename Tp>
bool check(Point<Tp> a, std::map<int, int> &mp, int type) {
  if (mp.count(a.x)) return type * mp[a.x] >= type * a.y;
  std::map<int, int>::iterator r = mp.lower_bound(a.x);
  if (r == mp.begin() || r == mp.end()) return 0;
  std::map<int, int>::iterator l = Last(r);
  Point<long long> p = Point<long long>(l->first, l->second);
  Point<long long> q = Point<long long>(r->first, r->second);
  if (type * cross(p, q, a) <= 0) return 1;
  return 0;
}
template <typename Tp>
void ins(Point<Tp> a, std::map<int, int> &mp, int type) {
  std::map<int, int>::iterator r = mp.lower_bound(a.x);
  if (r != mp.end()) {
    while (1) {
      std::map<int, int>::iterator t = Next(r);
      if (t == mp.end()) break;
      Point<long long> p = Point<long long>(r->first, r->second);
      Point<long long> q = Point<long long>(t->first, t->second);
      if (type * cross(p, q, a) >= 0)
        ++r, mp.erase(Last(r));
      else
        break;
    }
  }
  if (r != mp.begin()) {
    std::map<int, int>::iterator l = Last(r);
    while (1) {
      if (l == mp.begin()) break;
      std::map<int, int>::iterator t = Last(l);
      Point<long long> p = Point<long long>(t->first, t->second);
      Point<long long> q = Point<long long>(l->first, l->second);
      if (type * cross(p, q, a) >= 0)
        --l, mp.erase(Next(l));
      else
        break;
    }
  }
  mp[a.x] = a.y;
}
int main() {
  int q;
  scanf("%d", &q);
  while (q--) {
    int opt;
    Point<long long> a;
    scanf("%d%lld%lld", &opt, &a.x, &a.y);
    bool f1 = check(a, mp1, 1), f2 = check(a, mp2, -1);
    if (opt == 1) {
      if (!f1) ins(a, mp1, 1);
      if (!f2) ins(a, mp2, -1);
    } else {
      puts(f1 && f2 ? "YES" : "NO");
    }
  }
  return 0;
}
