#include <bits/stdc++.h>
using namespace std;
map<long long, long long> up, down;
long long q;
inline long long Cross(long long xa, long long ya, long long xb, long long yb) {
  return xa * yb - xb * ya;
}
inline bool check_up(long long x, long long y) {
  map<long long, long long>::iterator it = up.lower_bound(x);
  if (it == up.end()) return false;
  if (it->first == x) return y <= it->second;
  if (it == up.begin()) return false;
  map<long long, long long>::iterator jt = it;
  --jt;
  return Cross(it->first - jt->first, it->second - jt->second, x - jt->first,
               y - jt->second) <= 0;
}
inline bool check_down(long long x, long long y) {
  map<long long, long long>::iterator it = down.lower_bound(x);
  if (it == down.end()) return false;
  if (it->first == x) return y >= it->second;
  if (it == down.begin()) return false;
  map<long long, long long>::iterator jt = it;
  --jt;
  return Cross(it->first - jt->first, it->second - jt->second, x - jt->first,
               y - jt->second) >= 0;
}
inline bool remove_up(map<long long, long long>::iterator it) {
  if (it == up.begin()) return false;
  map<long long, long long>::iterator jt = it, kt = it;
  --jt;
  ++kt;
  if (kt == up.end()) return false;
  if (Cross(it->first - jt->first, it->second - jt->second,
            kt->first - jt->first, kt->second - jt->second) >= 0) {
    up.erase(it);
    return true;
  }
  return false;
}
inline bool remove_down(map<long long, long long>::iterator it) {
  if (it == down.begin()) return false;
  map<long long, long long>::iterator jt = it, kt = it;
  --jt;
  ++kt;
  if (kt == down.end()) return false;
  if (Cross(it->first - jt->first, it->second - jt->second,
            kt->first - jt->first, kt->second - jt->second) <= 0) {
    down.erase(it);
    return true;
  }
  return false;
}
inline void insert_up(long long x, long long y) {
  if (check_up(x, y)) return;
  up[x] = y;
  map<long long, long long>::iterator it = up.find(x), jt = it;
  if (it != up.begin()) {
    --jt;
    while (remove_up(jt++)) --jt;
  }
  if (++jt != up.end()) {
    while (remove_up(jt--)) ++jt;
  }
}
inline void insert_down(long long x, long long y) {
  if (check_down(x, y)) return;
  down[x] = y;
  map<long long, long long>::iterator it = down.find(x), jt = it;
  if (it != down.begin()) {
    --jt;
    while (remove_down(jt++)) --jt;
  }
  if (++jt != down.end()) {
    while (remove_down(jt--)) ++jt;
  }
}
signed main() {
  scanf("%I64d", &q);
  while (q--) {
    long long opt, x, y;
    scanf("%I64d%I64d%I64d", &opt, &x, &y);
    if (opt == 1) {
      insert_up(x, y);
      insert_down(x, y);
    } else
      puts(check_up(x, y) && check_down(x, y) ? "YES" : "NO");
  }
}
