Editorial for Dư đoạ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.

Ta có một thuật toán như sau:

  • Duyệt các điểm \(i\) theo thứ tự từ \(0\) đến \(10^6\).
  • Nếu gặp một đầu mút trái của một đoạn thì sẽ add đoạn đó vào một tập.
  • Khi đó kích thước của tập sẽ là số lượng đoạn đang che phủ điểm đó, nếu tập lớn hơn \(k\) thì ta cần xóa một vài đoạn trong tập (và đoạn đó sẽ là một trong các đoạn sẽ bị loại bỏ).
  • Sau đó, kiểm tra các đầu mút phải và nếu đoạn thuộc đầu mút phải đó vẫn còn nằm trong tập thì ta sẽ không loại bỏ và xóa đoạn đó ra khỏi tập.

Nhận xét: phần quan trọng của thuật toán này nằm ở bước thứ 3, chính là xóa các đoạn trong tập. Nhận thấy rằng những điểm từ \(0\) đến \(i - 1\) đều được thỏa mãn điều kiện đề bài, nên ta cần xóa đoạn nào che phủ nhiều điểm ở phìa từ \(i\) đến \(10^6\) nhất, hay nói cách khác là đoạn có đầu mút phải lớn nhất.



Comments

There are no comments at the moment.