trang chủ / bài tập / 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 lr (lr), 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 ix (x1), 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

  • 1n5000
  • 0ai109

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í 24 rỗng, không thao tác loại 1 nào với l2r hoặc l4r 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.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