canuc80k0633·34/50

Đoạn Dài Nhất Có Không Quá K Giá Trị

Nộp bài trên LQDOJ

Bài 06 · Two Pointers

Cho mảng gồm số nguyên. Một đoạn liên tiếp được gọi là hợp lệ nếu trong đoạn có không quá giá trị khác nhau.

Hãy in hai đầu mút của một đoạn hợp lệ dài nhất. Nếu có nhiều đoạn dài nhất, in bất kỳ một đoạn nào.

Input

  • Dòng đầu chứa hai số nguyên và .
  • Dòng thứ hai chứa số nguyên .

Output

  • In hai số nguyên là hai đầu mút của một đoạn dài nhất, theo chỉ số bắt đầu từ .

Constraints

  • .
  • .

Scoring

  • Subtask ( số điểm): .
  • Subtask ( số điểm): Không có giới hạn bổ sung.

Example

Test 1

Input

10 2
1 2 1 3 4 3 3 4 5 4

Output

4 8

Giải thích: Đoạn dài và chỉ có hai giá trị khác nhau. Mọi đoạn dài hơn đều chứa ít nhất ba giá trị khác nhau.

Lời giải tóm tắt
  • Phân tích: Duy trì cửa sổ [l,r], tần suất từng giá trị và số lượng giá trị khác nhau. Khi thêm a_r làm số loại vượt k, tăng l và giảm tần suất cho tới khi cửa sổ hợp lệ trở lại. Sau mỗi bước, cập nhật đoạn dài nhất.
  • Chứng minh đúng: Sau vòng co, [l,r] là cửa sổ dài nhất kết thúc tại r mà có không quá k loại; mọi đầu trái nhỏ hơn đều không hợp lệ. Mọi đoạn tối ưu có một biên phải nào đó, nên khi biên phải ấy được xét, thuật toán ghi nhận một đoạn dài ít nhất bằng nó. Đoạn được in luôn hợp lệ, do đó là tối ưu.
  • Độ phức tạp: Thời gian O(n) và bộ nhớ O(10^6+n).