Editorial for Ma trận


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.

Author: Yunan

Giá trị P trong bài toán là tổng diện tích bao phủ của K hình chữ nhật, tương tự E là tổng diện tích các vùng được bao phủ bởi số lượng chẵn hình chữ nhật.

Tính tổng diện tích bao phủ của các hình chữ nhật là bài toán cổ điển của kĩ thuật Sweep Line, có thể giải quyết thông qua cấu trúc Segment Tree.

Để tính tổng diện tích của các vùng được bao phủ bởi số lượng chẵn hình chữ nhật, ở mỗi nút id của cấu trúc Segment Tree, ta lưu thêm hai giá trị odd_{id}even_{id} tương ứng là số lượng ô mang giá trị lẻ và chẵn nằm trong đoạn được quản lý bởi nút id. Thao tác cập nhật đối với cấu trúc Segment Tree chỉ bao gồm hai giá trị 1-1, vì vậy khi cập nhật một đoạn, ta cần hoán đổi hai giá trị odd_{id}even_{id} của đoạn đó (khi cộng hoặc trừ đi một đơn vị, số chẵn trở thành số lẻ và ngược lại).

Ngoài ra để xử lý trường hợp even_{id} bao gồm cả những ô mang giá trị 0 (giá trị 0 cũng là giá trị chẵn), ta lưu thêm giá trị min_{id} là giá trị nhỏ nhất của ô nằm trong đoạn và count\_min_{id} là số lượng ô mang giá trị nhỏ nhất của đoạn. Khi min_{id} > 0, số lượng ô mang giá trị dương và chẵn nằm trong đoạn là even_{id}, ngược lại khi min_{id}=0, ta phải trừ đi số lượng ô mang giá trị 0, từ đó số lượng ô mang giá trị dương và chẵn là even_{id} - count\_min_{id}.

Độ phức tạp: O(KlogK)


Comments