func_code_string: #include <bits/stdc++.h>   class point2D {    public:     long long x, y;     point2D() {}     point2D(long long x, long long y) : x(x), y(y) {}     bool operator<(const point2D &other) const {       return ((y == other.y) ? (x > other.x) : (y > other.y));     }   };   point2D operator-(const point2D &u, const point2D &v) {     return point2D(u.x - v.x, u.y - v.y);   }   long long det(const point2D &u, const point2D &v) {     return u.x * v.y - v.x * u.y;   }   long long dir(const point2D &p, const point2D &u, const point2D &v) {     return det(u - p, v - p);   }   bool contains(int n, point2D vertex, point2D polygon[]) {     int l = 1, r = n - 1, m;     while (l < r) {       m = (l + r) / 2;       if (dir(polygon[0], polygon[m], vertex) <= 0)         r = m;       else         l = m + 1;     }     if (r == 1 || dir(polygon[0], polygon[n - 1], vertex) >= 0 ||         dir(polygon[r], polygon[r - 1], vertex) >= 0)       return 0;     return 1;   }   int n, m;   point2D polygonA[100000], vertexB;   int main() {     std::cin >> n;     for (int i = n - 1; i >= 0; i--) {       std::cin >> polygonA[i].x >> polygonA[i].y;     }     std::cin >> m;     for (int i = 0; i < m; i++) {       std::cin >> vertexB.x >> vertexB.y;       if (!contains(n, vertexB, polygonA)) {         std::cout <<  NO  << std::endl;         return 0;       }     }     std::cout <<  YES  << std::endl;     return 0;   }   