#include <bits/stdc++.h>
using namespace std;
map<int, int> top, down;
long long crs(int x0, int y0, int x1, int y1, int x2, int y2) {
  return (long long)(x1 - x0) * (long long)(y2 - y0) -
         (long long)(x2 - x0) * (long long)(y1 - y0);
}
bool InConvex(map<int, int> &mp, int x, int y) {
  if (mp.find(x) != mp.end()) return mp[x] >= y;
  map<int, int>::iterator inxt = mp.lower_bound(x);
  if (inxt == mp.end() || inxt == mp.begin()) return false;
  map<int, int>::iterator ipre = inxt;
  ipre--;
  return crs(x, y, ipre->first, ipre->second, inxt->first, inxt->second) <= 0;
}
bool Remove(map<int, int> &mp, map<int, int>::iterator it) {
  if (it == mp.begin()) return false;
  map<int, int>::iterator inxt = it, ipre = it;
  inxt++;
  ipre--;
  if (inxt == mp.end()) return false;
  if (crs(it->first, it->second, ipre->first, ipre->second, inxt->first,
          inxt->second) <= 0) {
    mp.erase(it);
    return true;
  }
  return false;
}
void Insert(map<int, int> &mp, int x, int y) {
  if (InConvex(mp, x, y)) return;
  mp[x] = y;
  map<int, int>::iterator it = mp.find(x);
  map<int, int>::iterator iwork = it;
  if (iwork != mp.begin()) {
    iwork--;
    while (Remove(mp, iwork++)) iwork--;
  }
  if (++iwork != mp.end()) {
    while (Remove(mp, iwork--)) iwork++;
  }
}
int q, o, x, y;
int main(int argc, char **argv) {
  scanf("%d", &q);
  while (q--) {
    scanf("%d%d%d", &o, &x, &y);
    if (o == 1) {
      Insert(top, x, y);
      Insert(down, x, -y);
    } else {
      if (InConvex(top, x, y) && InConvex(down, x, -y))
        puts("YES");
      else
        puts("NO");
    }
  }
  return 0;
}
