#HSGHNTHPT052006. Chia nhóm (Grouping)

Chia nhóm (Grouping)

Chia nhóm (Grouping)

Nguồn: Kỳ thi chọn HSG thành phố Hà Nội và chọn đội tuyển HSG dự thi Olympic quốc gia các môn văn hóa lớp 12 THPT năm học 2026–2027 — Môn Tin học (Bảng A), Bài 5
Phiên bản: Phước Hưng OJ Extended

Đề bài

Cho dãy số gồm NN số nguyên A1,A2,…,ANA_1,A_2,\ldots,A_N. Cần chia dãy thành các nhóm sao cho:

  • Mỗi nhóm chứa ít nhất một phần tử.
  • Mỗi nhóm gồm các phần tử liên tiếp của dãy.
  • Mỗi phần tử thuộc đúng một nhóm.
  • Không có giá trị nào xuất hiện trong nhiều hơn 22 nhóm.

Ví dụ, với A=[1,2,1,1,1,2]A=[1,2,1,1,1,2], có thể chia thành 44 nhóm:

[1]∣[2]∣[1,1,1]∣[2][1]\mid[2]\mid[1,1,1]\mid[2].

Cách chia [1]∣[2]∣[1,1]∣[1,2][1]\mid[2]\mid[1,1]\mid[1,2] không hợp lệ vì giá trị 11 xuất hiện trong 33 nhóm.

Hãy tìm cách chia dãy thành nhiều nhóm nhất và in ra số nhóm lớn nhất có thể tạo được.

Input

  • Dòng đầu tiên chứa số nguyên dương NN.
  • Dòng thứ hai chứa NN số nguyên A1,A2,…,ANA_1,A_2,\ldots,A_N.

Output

In ra một số nguyên dương là số lượng nhóm lớn nhất có thể chia được.

Subtask

  • Ràng buộc chung: 1≤N≤2×1051\le N\le 2\times10^5, ∣Ai∣≤109|A_i|\le10^9.
  • Subtask 1 — 3030 điểm: N≤20N\le20.
  • Subtask 2 — 3030 điểm: dãy đã cho theo thứ tự không giảm.
  • Subtask 3 — 2020 điểm: N≤2000N\le2000.
  • Subtask 4 — 2020 điểm: không có ràng buộc thêm.

Ví dụ

Input

5
1 2 1 2 1

Output

3

Giải thích

Có thể chia thành 33 nhóm, chẳng hạn:

[1]∣[2]∣[1,2,1][1]\mid[2]\mid[1,2,1].

Khi đó giá trị 11 xuất hiện trong nhóm thứ nhất và nhóm thứ ba; giá trị 22 xuất hiện trong nhóm thứ hai và nhóm thứ ba. Mỗi giá trị đều xuất hiện trong không quá 22 nhóm. Không thể chia dãy thành 44 nhóm mà vẫn thỏa mãn yêu cầu.