Hướng dẫn giải
Gọi $S$ là tổng của $k$ trong tất cả q truy vấn.
***Subtask 1***
Với mỗi điểm đỏ $I$, ta có thể kiểm tra xem nó có nằm trong tam giác $ABC$ không bằng cách tính tổng diện tích các tam giác $IAB, IAC, IBC$ có bằng diện tích tam giác $ABC$ không.
Độ phức tạp: $O(S \times M)$
***Subtask 2***
Với mỗi điểm đỏ, ta có thể kiểm tra điểm đó nằm trong đa giác hay không trong độ phức tạp $O(k)$ sử dụng công thức CCW.
Độ phức tạp: $O(S \times M)$
***Subtask 3***
Trước tiên, ta sẽ tìm bao lồi của $k$ điểm xanh.
Với mỗi điểm đỏ, ta có thể kiểm tra điểm đó nằm trong bao lồi hay không với độ phức $O(log_k)$ sử dụng chặt nhị phân. (https://www.youtube.com/watch?v=aoxOPx2BIHE).
Độ phức tạp: $O(S\times\log{S}\ +\ Q\ \times\ M\ \times\log{S})$
***Subtask 4***
Xét công thức tính diện tích một đa giác lồi $P$ gồm $n$ đỉnh, ta có $S\ =\sum_{i=0}^{n-1} ccw(\{0,0\},p[i],p[(i+1)\%n]$.
Nghĩa là ta sẽ đi tính tổng diện tích của các tam giác được tạo thành từ hai đỉnh liên tiếp và gốc tọa độ (do tính chất của hàm ccw, ta chấp nhận diện tích âm để bù trừ).
Áp dụng tư tưởng của công thức trên, giờ ta định nghĩa hàm $f(i,j)$ là số điểm đỏ nằm trong tam giác tạo thành từ gốc tọa độ và $2$ điểm xanh thứ $i$ và $j$. Lưu ý, nếu ba điểm $(\{0,0\},r[i],r[j])$ ngược chiều kim đồng hồ thì ta sẽ lấy giá trị dương, ngược lại lấy giá trị âm.
Như vậy, giờ kết quả của bài toán sẽ là $Res = \sum_{i=0}^{n-1}f(i,(i+1)\%n)$.
Hàm $f(i,j)$ có thể dễ dàng được chuẩn bị trước trong $O(N^2\times M)$.
Cách làm trên sẽ không gây ra trùng lặp bởi có hai dữ kiện quan trọng của bài là không có bộ ba điểm nào thẳng hàng cũng như không có hai điểm nào tạo thành một đường thẳng đi qua gốc tọa độ.
Độ phức tạp: $O(S\times\log{S})$