Chia đoạn theo số màu

Đề bài

Mô tả

Cho một dãy gồm n số nguyên dương a1,a2,,an, mỗi số là một "màu" trong khoảng 1ain.

Với một số nguyên dương k, ta cần chia dãy thành ít nhất các đoạn con liên tiếp sao cho mỗi đoạn chứa không quá k giá trị phân biệt. Gọi f(k) là số đoạn tối thiểu cần thiết.

Yêu cầu: với mọi k=1,2,,n, hãy tính giá trị f(k).

Dữ liệu vào

  • Dòng đầu chứa số nguyên n — số phần tử của dãy.
  • Dòng thứ hai chứa n số nguyên a1,a2,,an cách nhau bởi dấu cách.

Dữ liệu ra

In ra một dòng gồm n số nguyên f(1),f(2),,f(n) cách nhau bởi dấu cách.

Ràng buộc

  • 1n105
  • 1ain
  • Thời gian: 2 giây. Bộ nhớ: 256 MB.
  • Bài này chỉ chấp nhận lời giải C++.

Ví dụ

Input Output Giải thích
5
1 3 4 3 3
4 2 1 1 1 Với k=1, chia: [1], [3], [4], [3, 3] — cần 4 đoạn. Với k=2, chia: [1], [3, 4, 3, 3] — cần 2 đoạn. Với k3, cả dãy là một đoạn.
8
1 5 7 8 1 7 6 1
8 4 3 2 1 1 1 1 Với k=1 mỗi phần tử là một đoạn riêng. Với k=2: [1,5], [7,8], [1,7], [6,1]. Với k=5 trở lên, cả dãy nằm trong một đoạn duy nhất.

Bình luận

Không có bình luận tại thời điểm này.

gnatmake 12.2.0 a68g 3.1.2 nasm 2.16.1 as_x64 2.46 awk 1.3.4 gcc 16.1.0 csc 6.12.0.200 g++ 16.1.0 g++-themis 16.1.0 g++17 16.1.0 g++20 16.1.0 g++23 16.1.0 clang++ 22.1.6 dmd 2.112.0 dart 3.12.1 gforth 0.7.3 gfortran 12.2.0 go 1.26.3 groovyc 5.0.6 javac 25.0.3 node 26.2.0 kotlinc 2.3.21 sbcl 2.2.9 lua 5.4.8 nim 2.2.10 fpc 3.2.2 fpc-themis 3.2.2 perl 5.36.0 php 8.5.6 pike 8.0 pypy3 7.3.23 python3 3.14.5 racket 8.7 ruby 4.0.5 rustc 1.96.0 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 tclsh 8.6 bun 1.3.14 deno 2.8.1 v 0.5.1 zig 0.16.0