#include <bits/stdc++.h>
using namespace std;
long long n;
map<long long, long long> top, down;
inline long long read() {
  long long x = 0, op = 1;
  char c = getchar();
  while (c < '0' || c > '9') {
    if (c == '-') op = -1;
    c = getchar();
  }
  while (c >= '0' && c <= '9') {
    x = x * 10 + c - '0';
    c = getchar();
  }
  return x * op;
}
bool check_top(long long x, long long y) {
  map<long long, long long>::iterator i = top.lower_bound(x);
  if (i == top.end()) return 0;
  if (i->first == x) return y <= i->second;
  if (i == top.begin()) return 0;
  map<long long, long long>::iterator j = i;
  j--;
  return (i->first - j->first) * (y - j->second) -
             (i->second - j->second) * (x - j->first) <=
         0;
}
bool check_down(long long x, long long y) {
  map<long long, long long>::iterator i = down.lower_bound(x);
  if (i == down.end()) return 0;
  if (i->first == x) return y >= i->second;
  if (i == down.begin()) return 0;
  map<long long, long long>::iterator j = i;
  j--;
  return (i->first - j->first) * (y - j->second) -
             (i->second - j->second) * (x - j->first) >=
         0;
}
bool delete_top(map<long long, long long>::iterator i) {
  if (i == top.begin()) return 0;
  map<long long, long long>::iterator j = i, k = i;
  j--;
  k++;
  if (k == top.end()) return 0;
  if ((i->first - j->first) * (k->second - j->second) -
          (i->second - j->second) * (k->first - j->first) >=
      0) {
    top.erase(i);
    return 1;
  }
  return 0;
}
bool delete_down(map<long long, long long>::iterator i) {
  if (i == down.begin()) return 0;
  map<long long, long long>::iterator j = i, k = i;
  j--;
  k++;
  if (k == down.end()) return 0;
  if ((i->first - j->first) * (k->second - j->second) -
          (i->second - j->second) * (k->first - j->first) <=
      0) {
    down.erase(i);
    return 1;
  }
  return 0;
}
void insert_top(long long x, long long y) {
  if (check_top(x, y)) return;
  top[x] = y;
  map<long long, long long>::iterator i = top.find(x), j = i;
  if (i != top.begin()) {
    j--;
    while (delete_top(j++)) j--;
  }
  if (++j != top.end())
    while (delete_top(j--)) j++;
}
void insert_down(long long x, long long y) {
  if (check_down(x, y)) return;
  down[x] = y;
  map<long long, long long>::iterator i = down.find(x), j = i;
  if (i != down.begin()) {
    j--;
    while (delete_down(j++)) j--;
  }
  if (++j != down.end())
    while (delete_down(j--)) j++;
}
int main() {
  n = read();
  for (long long i = 1; i <= n; i++) {
    long long op = read(), x = read(), y = read();
    if (op == 1) {
      insert_top(x, y);
      insert_down(x, y);
    } else
      puts(check_top(x, y) && check_down(x, y) ? "YES" : "NO");
  }
  return 0;
}
