func_code_string: #include <bits/stdc++.h>   using namespace std;   struct point {     long double x, y, s;     point() {}     point(int xx, int yy, point o) {       x = (long double)xx, y = (long double)yy;       s = atan2(y - o.y, x - o.x);     }   } o, p;   bool operator<(point _1, point _2) {     if (_1.s == _2.s) {       return _1.x < _2.x;     }     return _1.s < _2.s;   }   point operator-(point a, point b) { return point(a.x - b.x, a.y - b.y, o); }   long double Cro(point a, point b) { return a.x * b.y - a.y * b.x; }   int px[5], py[5], n;   set<point> s;   set<point>::iterator getpre(set<point>::iterator it) {     if (it == s.begin()) {       return --s.end();     }     return --it;   }   set<point>::iterator getnxt(set<point>::iterator it) {     if ((++it) == s.end()) {       return s.begin();     }     return it;   }   void Insert(point p) {     s.insert(p);     set<point>::iterator tmp = s.find(p);     set<point>::iterator i = getpre(tmp), j = getpre(i);     while (Cro(p - (*j), (*i) - (*j)) >= 0) {       s.erase(i);       i = j, j = getpre(j);     }     i = getnxt(tmp), j = getnxt(i);     while (Cro(p - (*j), (*i) - (*j)) <= 0) {       s.erase(i);       i = j, j = getnxt(j);     }     return;   }   int main() {     {       n = 0;       char ch;       int f = 0;       do {         ch = getchar();         if (ch ==  - ) {           f = 1;         }       } while (ch <  0  || ch >  9 );       while ( 0  <= ch && ch <=  9 ) {         n = (n << 1) + (n << 3) + ch - 48;         ch = getchar();       }       if (f) n = -n;     }     int op, x, y;     for (int i = 1; i <= 3; i++) {       {         op = 0;         char ch;         int f = 0;         do {           ch = getchar();           if (ch ==  - ) {             f = 1;           }         } while (ch <  0  || ch >  9 );         while ( 0  <= ch && ch <=  9 ) {           op = (op << 1) + (op << 3) + ch - 48;           ch = getchar();         }         if (f) op = -op;       }       {         px[i] = 0;         char ch;         int f = 0;         do {           ch = getchar();           if (ch ==  - ) {             f = 1;           }         } while (ch <  0  || ch >  9 );         while ( 0  <= ch && ch <=  9 ) {           px[i] = (px[i] << 1) + (px[i] << 3) + ch - 48;           ch = getchar();         }         if (f) px[i] = -px[i];       }       {         py[i] = 0;         char ch;         int f = 0;         do {           ch = getchar();           if (ch ==  - ) {             f = 1;           }         } while (ch <  0  || ch >  9 );         while ( 0  <= ch && ch <=  9 ) {           py[i] = (py[i] << 1) + (py[i] << 3) + ch - 48;           ch = getchar();         }         if (f) py[i] = -py[i];       }       o.x += (long double)px[i], o.y += (long double)py[i];     }     o.x /= 3.0, o.y /= 3.0;     for (int i = 1; i <= 3; i++) {       s.insert(point(px[i], py[i], o));     }     for (int i = 4; i <= n; i++) {       {         op = 0;         char ch;         int f = 0;         do {           ch = getchar();           if (ch ==  - ) {             f = 1;           }         } while (ch <  0  || ch >  9 );         while ( 0  <= ch && ch <=  9 ) {           op = (op << 1) + (op << 3) + ch - 48;           ch = getchar();         }         if (f) op = -op;       }       {         x = 0;         char ch;         int f = 0;         do {           ch = getchar();           if (ch ==  - ) {             f = 1;           }         } while (ch <  0  || ch >  9 );         while ( 0  <= ch && ch <=  9 ) {           x = (x << 1) + (x << 3) + ch - 48;           ch = getchar();         }         if (f) x = -x;       }       {         y = 0;         char ch;         int f = 0;         do {           ch = getchar();           if (ch ==  - ) {             f = 1;           }         } while (ch <  0  || ch >  9 );         while ( 0  <= ch && ch <=  9 ) {           y = (y << 1) + (y << 3) + ch - 48;           ch = getchar();         }         if (f) y = -y;       }       p = point(x, y, o);       set<point>::iterator nxt = s.lower_bound(p);       if (nxt == s.end()) {         nxt = s.begin();       }       set<point>::iterator pre = getpre(nxt);       if (op == 1) {         if (Cro(p - (*pre), (*nxt) - p) > 0) {           Insert(p);         }       } else {         if (Cro(p - (*pre), (*nxt) - p) > 0) {           puts( NO );         } else {           puts( YES );         }       }     }     return 0;   }   