trang chủ / đề bài / clrmulti

Xoá sạch multiset

Đề bài

Mô tả

Cho một multiset chứa các số nguyên. Ban đầu, multiset có a1 phần tử bằng 1, a2 phần tử bằng 2, ..., an phần tử bằng n.

Bạn có thể thực hiện hai loại thao tác:

  1. Chọn hai số nguyên l và r (l≤r), sau đó xoá đúng một lần xuất hiện của l, một lần xuất hiện của l+1, ..., một lần xuất hiện của r khỏi multiset. Thao tác này chỉ thực hiện được khi mỗi số từ l đến r đều xuất hiện ít nhất một lần.
  2. Chọn hai số nguyên i và x (x≥1), sau đó xoá x lần xuất hiện của i khỏi multiset. Thao tác này chỉ thực hiện được khi multiset chứa ít nhất x lần xuất hiện của i.

Hãy tìm số thao tác tối thiểu cần thực hiện để xoá hết mọi phần tử khỏi multiset.

Dữ liệu vào

  • Dòng đầu chứa một số nguyên n.
  • Dòng thứ hai chứa n số nguyên a1,a2,…,an.

Dữ liệu ra

  • In ra một số nguyên — số thao tác tối thiểu cần thực hiện để xoá hết mọi phần tử khỏi multiset.

Ràng buộc

  • 1≤n≤5000
  • 0≤ai≤109

Ví dụ

Input Output Giải thích
4
1 4 1 1
2 Dùng thao tác loại 1 với l=1,r=4 để xoá một bản của mỗi số. Còn lại ba số 2, dùng thao tác loại 2 xoá cả ba cùng lúc. Tổng cộng 2 thao tác.
5
1 0 1 0 1
3 Vì các vị trí 2 và 4 rỗng, không thao tác loại 1 nào với l≤2≤r hoặc l≤4≤r hợp lệ. Phải dùng ba thao tác loại 2 tách rời cho các số 1, 3, 5.
4
3 3 3 3
3 Dùng thao tác loại 1 ba lần với l=1,r=4 để xoá ba "lớp" trải đều trên cả bốn số. Tổng cộng 3 thao tác.

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.47 awk 1.3.4 gcc 16.2.0 dotnet 10.0.402 g++ 16.2.0 g++-themis 16.2.0 g++17 16.2.0 g++20 16.2.0 g++23 16.2.0 clang++ 22.1.8 dmd 2.113.0 dart 3.13.6 gforth 0.7.3 gfortran 15.3.0 go 1.27.3 groovyc 5.1.3 javac 26.0.2.1 node 26.12.1 julia 1.13.2 kotlinc 2.4.21 lean 4.35.0 sbcl 2.2.9 lua 5.5.1 nim 2.2.12 fpc 3.2.2 fpc-themis 3.2.2 perl 5.42.3 php 8.5.12 pike 8.0 swipl 9.0.4 pypy3 7.3.23 python3 3.15.1 racket 8.7 ruby 4.0.8 rustc 1.99.1 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 swiftc 6.4.1 tclsh 8.6 bun 1.4.4 deno 2.9.8 v 0.5.2 zig 0.17.0