trang chủ / đề bài / twistmov

Chuyển động uốn lượn

Đề bài

Mô tả

Cho một dãy gồm n số nguyên a1,a2,…,an, trong đó mỗi phần tử chỉ nhận giá trị 1 hoặc 2.

Bạn được phép chọn đúng một đoạn [l,r] (với 1≤l≤r≤n) rồi đảo ngược thứ tự các phần tử trong đoạn đó, tức là al,al+1,…,ar trở thành ar,ar−1,…,al.

Sau khi thực hiện phép đảo ngược, hãy tính độ dài dãy con không giảm dài nhất của dãy mới. Bạn cần chọn đoạn [l,r] sao cho độ dài này lớn nhất có thể.

Một dãy con không giảm là một dãy các chỉ số p1<p2<…<pk sao cho ap1≤ap2≤…≤apk. Độ dài của dãy con là k.

Dữ liệu vào

  • Dòng đầu chứa số nguyên n, độ dài của dãy.
  • Dòng thứ hai chứa n số nguyên a1,a2,…,an.

Dữ liệu ra

  • In ra một số nguyên duy nhất là độ dài lớn nhất có thể của dãy con không giảm sau khi đảo ngược đúng một đoạn.

Ràng buộc

  • 1≤n≤2000
  • 1≤ai≤2

Ví dụ

Input Output Giải thích
4
1 2 1 2
4 Đảo ngược đoạn [2,3], dãy trở thành 1 1 2 2, có dãy con không giảm dài 4 (chính là cả dãy).
10
1 1 2 2 2 1 1 2 2 1
9 Đảo ngược đoạn [3,7], dãy trở thành 1 1 1 1 2 2 2 2 2 1, dãy con không giảm dài nhất là 9 (bỏ đi số 1 cuối cùng).

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