Sàng lọc dữ liệu tại UMT
View as PDFTrong một buổi sinh hoạt học thuật ở UMT, các thành viên được giao nhiệm vụ làm sạch một tập dữ liệu đầu vào bị trùng lặp. Mỗi bạn được cấp một dãy số gồm ~n~ phần tử nguyên, đại diện cho các mã sinh viên do hệ thống ghi nhận (đôi khi bị lỗi lặp mã).
Để chuẩn bị cho một buổi phân tích tiếp theo, cố vấn học thuật yêu cầu mỗi bạn phải làm sạch dãy mã sinh viên này sao cho mọi mã còn lại đều khác nhau (không có mã nào trùng lặp). Tuy nhiên, do hạn chế giao diện phần mềm, mỗi thao tác chỉ có thể là:
- Xóa mã đầu tiên trong danh sách.
- Xóa mã cuối cùng trong danh sách.
Nhiệm vụ của bạn là xác định số thao tác ít nhất cần thực hiện để danh sách chỉ còn các mã phân biệt.
Input
Dòng đầu tiên là một số nguyên ~n~ (~1 \leq n \leq 10^5~) — số lượng mã sinh viên được ghi nhận.
Dòng thứ hai gồm ~n~ số nguyên ~a_1, a_2, \ldots, a_n~ (~1 \leq a_i \leq 10^5~) — danh sách mã sinh viên.
Output
In ra một số nguyên duy nhất — số thao tác tối thiểu cần thực hiện để danh sách trở nên phân biệt.
Sample input 1
4
4 3 3 2
Sample output 1
2
Sample input 2
5
1 2 3 4 5
Sample output 2
0
Giải thích
Trong Ví dụ trên, có thể xóa 2 phần tử đầu tiên để được ~[3, 2]~, hoặc 2 phần tử cuối cùng để được ~[4, 3]~. Cả hai đều là dãy gồm các phần tử phân biệt, và cần đúng 2 thao tác.
Subtasks
- Subtask 1 (50% số điểm): ~n \le 5000~.
- Subtask 2 (50% số điểm): Không giới hạn gì thêm.
Comments