func_code_string: #include <bits/stdc++.h>   using namespace std;   const int inf = 1e9 + 5;   const long long linf = 1e18 + 5;   class point {    public:     int x, y;     double m;     point() {}     point(int x, int y) {       this->x = x;       this->y = y;       this->m = atan2(y, x);     }     bool operator<(point other) const { return m < other.m; }     bool operator==(point other) const {       return x == other.x and y == other.y and m == other.m;     }   };   int n, c, x, y, sumx, sumy;   pair<int, int> a[5];   set<point> s;   long long ccw(point a, point c, point b) {     pair<int, int> v1 = make_pair(c.x - a.x, c.y - a.y);     pair<int, int> v2 = make_pair(b.x - a.x, b.y - a.y);     return (long long)v1.first * v2.second - (long long)v1.second * v2.first;   }   set<point>::iterator something_stupid_(point x) {     set<point>::iterator it = s.lower_bound(x);     if (it == s.end()) it = s.begin();     return it;   }   set<point>::iterator something_stupid_(set<point>::iterator it) {     it++;     if (it == s.end()) it = s.begin();     return it;   }   set<point>::iterator _something_stupid(set<point>::iterator it) {     if (it == s.begin()) {       it = s.end();       it--;     } else       it--;     return it;   }   int main() {     ios ::sync_with_stdio(0);     cin >> n;     for (int i = 1; i <= 3; i++) {       cin >> c >> a[i].first >> a[i].second;       sumx += a[i].first;       sumy += a[i].second;     }     pair<int, int> cent = make_pair(sumx, sumy);     for (int i = 1; i <= 3; i++) {       a[i].first *= 3;       a[i].second *= 3;       a[i].first -= cent.first;       a[i].second -= cent.second;       point t(a[i].first, a[i].second);       s.insert(t);     }     for (int i = 4; i <= n; i++) {       cin >> c >> x >> y;       x *= 3;       y *= 3;       x -= cent.first;       y -= cent.second;       point t(x, y);       if (c == 1) {         set<point>::iterator left = something_stupid_(t);         set<point>::iterator right = _something_stupid(left);         if (ccw(*left, *right, t) <= 0) continue;         while (s.size() >= 2 and ccw(t, *left, *something_stupid_(left)) <= 0) {           set<point>::iterator it = left;           left = something_stupid_(left);           s.erase(it);         }         right = _something_stupid(left);         while (s.size() >= 2 and ccw(t, *right, *_something_stupid(right)) >= 0) {           set<point>::iterator it = right;           right = _something_stupid(right);           s.erase(it);         }         s.insert(t);       } else {         set<point>::iterator left = something_stupid_(t);         set<point>::iterator right = _something_stupid(left);         if (ccw(*left, *right, t) <= 0)           cout <<  YES  <<   n ;         else           cout <<  NO  <<   n ;       }     }     return 0;   }   