trang chủ / bài tập / serstair

Sereja và Bậc thang

Đề bài

Mô tả

Một dãy số a1,a2,,aL được gọi là dãy bậc thang nếu tồn tại một chỉ số i (1iL) sao cho:

a1<a2<<ai1<ai>ai+1>>aL1>aL.

Nói cách khác, dãy tăng ngặt cho tới phần tử đỉnh ai rồi giảm ngặt cho tới hết. Phần tăng hoặc phần giảm có thể rỗng (ví dụ các dãy [1,2,3,2][4,2] đều là dãy bậc thang, còn [3,1,2] thì không).

Cho m tấm thẻ, tấm thứ j ghi số bj. Hãy chọn ra một số tấm thẻ và xếp thành một hàng sao cho dãy số thu được là một dãy bậc thang, đồng thời số thẻ được dùng là nhiều nhất có thể.

Dữ liệu vào

  • Dòng đầu chứa số nguyên m — số tấm thẻ.
  • Dòng thứ hai chứa m số nguyên b1,b2,,bm — số ghi trên các tấm thẻ.

Dữ liệu ra

  • Dòng đầu in ra số lượng thẻ nhiều nhất có thể xếp thành dãy bậc thang.
  • Dòng thứ hai in ra dãy bậc thang tương ứng. Nếu có nhiều đáp án, in ra một đáp án bất kỳ.

Ràng buộc

  • 1m105
  • 1bj5000

Ví dụ

Input Output Giải thích
5
1 2 3 4 5
5
1 2 3 4 5
Có thể dùng cả 5 thẻ. Dãy 1 2 3 4 5 tăng ngặt nên là dãy bậc thang hợp lệ (đỉnh ở cuối). Dãy 5 4 3 2 1 cũng là một đáp án đúng.
6
1 1 2 2 3 3
5
1 2 3 2 1
Mỗi giá trị chỉ được dùng nhiều nhất hai lần (một lần ở nhánh tăng, một lần ở nhánh giảm), riêng đỉnh dùng một lần. Giá trị lớn nhất 3 làm đỉnh nên chỉ dùng một lần; ta bỏ đi một thẻ 3 thừa.

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 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