#include #include #include #include #include #include #include #include #include #include #include #include #define rf freopen("in.in", "r", stdin) #define wf freopen("out.out", "w", stdout) #define rep(i, s, n) for(int i=int(s); i<=int(n); ++i) using namespace std; const int mx = 1e5 + 10, mod = 1e9+7; #define pi pair #define ff first #define ss second #define mp make_pair pi red_points[mx], black_points[mx]; int blacks_inside[111][111]; const int base = 1e4; int n, m, q; int cross_prod(pi pti, pi ptj, pi ptk) { int ix = pti.ff, iy = pti.ss; int jx = ptj.ff, jy = ptj.ss; int kx = ptk.ff, ky = ptk.ss; return (ix - jx) * (ky - jy) - (iy - jy) * (kx - jx); } int test_inside(pi pti, pi ptj, pi ptk, pi pts) { int ix = pti.ff, iy = pti.ss; int jx = ptj.ff, jy = ptj.ss; int kx = ptk.ff, ky = ptk.ss; int sx = pts.ff, sy = pts.ss; int as_x = sx-ix, as_y = sy-iy; bool s_ab = (jx-ix)*as_y-(jy-iy)*as_x > 0; if((kx-ix)*as_y-(ky-iy)*as_x > 0 == s_ab) return 0; if((kx-jx)*(sy-jy)-(ky-jy)*(sx-jx) > 0 != s_ab) return 0; return 1; } void count_blacks_inside(int i, int j) { pi pti = red_points[i], ptj = red_points[j]; if(cross_prod(pti, mp(0, 0), ptj) <= 0) return; rep(p, 1, m) blacks_inside[i][j] += test_inside(pti, mp(0, 0), ptj, black_points[p]); blacks_inside[j][i] = -blacks_inside[i][j]; } int main() { //rf;// wf; ios::sync_with_stdio(0); cin >> n >> m; rep(i, 1, n) { int x, y; cin >> x >> y; x += base; y += base; red_points[i] = mp(x, y); } rep(i, 1, m) { int x, y; cin >> x >> y; x += base; y += base; black_points[i] = mp(x, y); } rep(i, 1, n) rep(j, 1, n) count_blacks_inside(i, j); cin >> q; while(q--) { int k; cin >> k; int prev, cur, start; cin >> prev; start = prev; int ans = 0; for(int i = 1; i> cur; ans += blacks_inside[prev][cur]; prev = cur; } ans += blacks_inside[cur][start]; cout << abs(ans) << '\n'; } return 0; }