#include <bits/stdc++.h>
using namespace std;
long long int BS(vector<long long int>& V, long long int low,
                 long long int high, long long int key);
void SieveOfEratosthenes(vector<long long int>& V, long long int num);
long long int gcd(long long int a, long long int b);
long long int lcm(long long int a, long long int b);
unsigned long long int modularExponentiation(unsigned long long int x,
                                             unsigned long long int n,
                                             unsigned long long int M);
void dsp(vector<long long int>& V);
void dsp2(vector<pair<long long int, long long int>>& V);
void dsp3(map<long long int, long long int>& M);
double fact(double n);
long long int nPr(long long int n, long long int r);
long long int nCr(long long int n, long long int r);
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  char o;
  long long int x, y;
  long long int L, B;
  L = INT64_MIN;
  B = INT64_MIN;
  long long int TC;
  cin >> TC;
  while (TC--) {
    cin >> o >> x >> y;
    if (x > y) swap(x, y);
    if (o == '+') {
      L = max(L, x);
      B = max(B, y);
    } else {
      if (((x >= L) && (y >= B)) || ((y >= L) && (x >= B)))
        cout << "YES\n";
      else
        cout << "NO\n";
    }
  }
  return 0;
}
long long int BS(vector<long long int>& V, long long int low,
                 long long int high, long long int key) {
  long long int mid = (low + high) / 2;
  if (low <= high) {
    if (key == V[mid]) {
      return mid;
    } else if (key < V[mid]) {
      return BS(V, low, mid - 1, key);
    } else
      return BS(V, mid + 1, high, key);
  }
  if (low > -1 && high < (long long int)V.size()) {
    if (V[low] < V[high])
      return low;
    else
      return high;
  } else {
    return mid;
  }
}
void SieveOfEratosthenes(vector<long long int>& V, long long int num) {
  bool prime[num + 1];
  memset(prime, true, sizeof(prime));
  for (long long int p = 2; p * p <= num; p++) {
    if (prime[p] == true) {
      for (long long int i = p * p; i <= num; i += p) prime[i] = false;
    }
  }
  for (long long int p = 2; p <= num; p++)
    if (prime[p]) V.push_back(p);
}
long long int gcd(long long int a, long long int b) {
  if (b == 0) return a;
  return gcd(b, a % b);
}
long long int lcm(long long int a, long long int b) {
  return (a * b) / gcd(a, b);
}
unsigned long long int modularExponentiation(unsigned long long int x,
                                             unsigned long long int n,
                                             unsigned long long int M) {
  unsigned long long int result = 1;
  while (n > 0) {
    if (n % 2 == 1) result = (result * x) % M;
    x = (x * x) % M;
    n = n / 2;
  }
  return result;
}
void dsp(vector<long long int>& V) {
  unsigned long long int j;
  for (j = 0; j < V.size(); j++) {
    cout << V[j] << " ";
  }
  cout << endl;
}
void dsp2(vector<pair<long long int, long long int>>& V) {
  unsigned long long int j;
  for (j = 0; j < V.size(); j++) {
    cout << V[j].first << " " << V[j].second << " ";
  }
  cout << endl;
}
void dsp3(map<long long int, long long int>& M) {
  map<long long int, long long int>::iterator it = M.begin();
  while (it != M.end()) {
    cout << it->first << " " << it->second << endl;
    it++;
  }
}
double fact(double n) {
  double i = 1;
  double res = 1;
  if (n == 0) return 1.00;
  while (i <= n) {
    res *= i;
    i++;
  }
  return res;
}
long long int nPr(long long int n, long long int r) {
  return (fact(n) / fact(n - r));
}
long long int nCr(long long int n, long long int r) {
  return (fact(n) / (fact(r) * fact(n - r)));
}
