func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 1e5 + 100;   long long n, m, dau, cuoi, giua, pos1, pos2, t;   bool kt;   struct point {     long long x, y;   } p[N], ab, ac, z;   long long ccw(point a, point b, point c) {     ab = {b.x - a.x, b.y - a.y};     ac = {c.x - a.x, c.y - a.y};     return ab.x * ac.y - ab.y * ac.x;   }   long long dis(point a, point b) {     return (b.x - a.x) * (b.x - a.x) + (b.y - a.y) * (b.y - a.y);   }   bool cmp1(point a, point b) { return (a.y < b.y || (a.y == b.y && a.x < b.x)); }   bool cmp2(point b, point c) {     t = ccw(p[1], b, c);     return t > 0 || (t == 0 && dis(p[1], b) > dis(p[1], c));   }   bool check(point z) {     if (ccw(p[1], p[2], z) <= 0) return 0;     if (ccw(p[n], p[1], z) <= 0) return 0;     pos1 = pos2 = 0;     dau = 2;     cuoi = n;     while (dau <= cuoi) {       giua = (dau + cuoi) / 2;       if (ccw(p[1], p[giua], z) >= 0)         pos1 = giua, dau = giua + 1;       else         cuoi = giua - 1;     }     if (pos1 == 0) return 0;     dau = 2;     cuoi = n;     while (dau <= cuoi) {       giua = (dau + cuoi) / 2;       if (ccw(p[1], p[giua], z) <= 0)         pos2 = giua, cuoi = giua - 1;       else         dau = giua + 1;     }     if (pos2 == 0) return 0;     if (pos1 == pos2) {       if (dis(p[1], p[pos1]) <= dis(p[1], z))         return 0;       else         return 1;     }     if (ccw(p[pos1], p[pos2], z) <= 0) return 0;     return 1;   }   int main() {     cin >> n;     for (int i = 1; i <= n; i++) {       cin >> p[i].x >> p[i].y;     }     sort(p + 1, p + 1 + n, cmp1);     sort(p + 2, p + 1 + n, cmp2);     cin >> m;     kt = 1;     for (int i = 1; i <= m; i++) {       cin >> z.x >> z.y;       if (kt == 1)         if (check(z) == 0) {           kt = 0;         }     }     if (kt == 1)       cout <<  YES ;     else       cout <<  NO ;   }   