Editorial for DIVISORPART
Remember to use this editorial only when stuck, and not to copy-paste code from it. Please be respectful to the problem author and editorialist.
Submitting an official solution before solving the problem yourself is a bannable offence.
Submitting an official solution before solving the problem yourself is a bannable offence.
Đặt ~f_i =0~ nếu ~a_{i−1}~ là ước của ~a_i~ và ~f_i = i~ nếu ~a_{i−1}~ không phải là ước của ~a_i~. Suy ra. $$S_i = \max^{i}_{j=1}f_i$$
Xây dựng segment tree mà mỗi node trong cây lưu giá trị max ~f_i~ trong đoạn node đó quản lý. Như vậy ta có thể dễ dàng tính được ~S_i~ thông qua segment tree.
Khi thay đổi giá trị của ~a_i~, chỉ có ~f_i~ và ~f_{i+1}~ là có thể thay đổi do đó ta chỉ cần cập nhật lại 2 vị trí này trong segment tree.
Độ phức tạp: ~O(n · log_2n)~
Comments