Editorial for LCM
Submitting an official solution before solving the problem yourself is a bannable offence.
Author:
Subtask 1: Ta đơn giản kiểm tra tất cả các bộ ba .
Độ phức tạp:
Subtask 2: Ta tiến hành đếm số bộ ba thỏa mãn .
Vì và nên ta cần đếm số bộ ba thỏa mãn một trong hai trường hợp:
- Trường hợp 1:
- Trường hợp 2: và
Đối với trường hợp 1, ta đơn giản đếm số ước của thỏa mãn . Gọi số lượng ước tìm được là , khi đó số lượng bộ ba thỏa mãn thuộc về trường hợp 1 là:
Đối với trường hợp 2, vì và nên . Ngoài ra, là ước số của nên . Từ đó, dễ dàng nhận thấy và . Vì cũng là ước số của nên hoặc .
Tóm lại đối với trường hợp 2, ta chỉ cần kiểm tra: hoặc .
Độ phức tạp:
Subtask 3: Gọi của đoạn là số lượng số nguyên thỏa mãn và . Khi đó, tổng số lượng bộ ba thỏa mãn là với tổng các giá trị của các đoạn nằm trong .
Từ đó, ta có thể tính cho từng đoạn và với mỗi test case, tính tổng các giá trị của các đoạn nằm trong đoạn .
Độ phức tạp:
Subtask 4: Ta có thể xử lý các test case dưới dạng offline:
- Xây dựng mảng , ban đầu với mọi .
- Duyệt qua các giá trị giảm từ về .
- Với mỗi giá trị , cập nhật với mỗi đoạn .
- Đồng thời với các đoạn , số bộ ba thỏa mãn là .
Việc xây dựng mảng có thể thực hiện bằng cấu trúc Segment Tree hoặc Fenwick Tree.
Độ phức tạp:
Comments