# Solution bài 3 Round 2 - Cấp số cộng Một cấp số cộng được xác định khi ta biết số đầu tiên ($a$), và công bội ($d$). ## Subtask 1: Duyệt qua $O(n)$ giá trị của $a$ và $O(n)$ giá trị của $d$. Nhận thấy độ dài dãy tối đa là: $t = \left\lfloor\frac{N-a}{d}\right\rfloor + 1$ vì các giá trị nằm trong đoạn $[0,N]$ Vậy, với cặp $(a,d)$ bất kì, ta cộng vào đáp án một lượng $t$ (có $t$ dãy cấp số cộng với độ dài lần lượt là $1,2,3,\dots,t$) ĐPT: $O(n^2)$ ## Subtask 2: Nhắc lại, ở subtask 1, với $(a,d)$ bất kì, ta cộng vào đáp án $(N-a) / d + 1$. Ta cố giảm thiểu ĐPT bằng cách chỉ duyệt $O(n)$ giá trị của $d$. Có thể tính được tổng trên mà không cần duyệt $a$ hay không? Giả sử $N = kd + r (0 \le r < d)$ Quan sát: - Với $0 \le a \le r \rightarrow$ cộng vào $(k+1) \Rightarrow$ tổng cộng vào là $(k+1)(r+1)$ - Với $r < a \le r+d \rightarrow$ cộng vào $k \Rightarrow$ tổng cộng vào là $kd$ - Với $r+d < a \le r+2d \Rightarrow$ tổng cộng vào là $(k-1)d$ - ... - Với $r+d.i < a \le r+d(i+1) \Rightarrow$ tổng cộng vào là $(k-i)d$ - ... Vậy với mỗi $d$, hoàn toàn tính được tổng của các cặp $(a,d)$ trong $O(1)$. ĐPT: $O(n)$ ## Subtask 3: Ta giải bằng chia căn. Nhận xét: Công bội càng lớn thì độ dài tối đa của dãy CSC càng bé. Với $d > \sqrt(n)$, độ dài của dãy CSC công bội $d$ không vượt quá $\sqrt{n}$. Đặt $R = \left\lfloor\sqrt{n}\right\rfloor$. Ta chia làm 2 trường hợp: - $d \le R$. Tiến hành duyệt $d$ và giải như subtask 2 - $d > R$, ta kết luận độ dài dãy $<R$. Ta tiến hành duyệt độ dài dãy, đặt là $l,$ $l \in [1,R-1]$. Cần trả lời câu hỏi: "Có bao nhiêu dãy CSC có độ dài $l$?" Nhận thấy với CSC có độ dài $l$, công bội $d$ thì hiệu giữa giá trị cuối và giá trị đầu là $d(l-1)$. Vì các giá trị giới hạn trong $[0,N]$ nên sẽ có $N-d(l-1)+1$ dãy CSC như vậy. Vì thế, nếu cố định $l$ thì ta hoàn toàn tính được công bội lớn nhất có thể: $d_{max} = \left\lfloor\frac{N}{l-1}\right\rfloor)$. Tổng $\Sigma_{d = R+1}^{d_{max}} N-d(l-1)+1$ tính được trong $O(1)$. Vậy ĐPT tổng là $O(\sqrt(N))$