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