trang chủ / đề bài / updownsubseq

Dãy Tăng Giảm

Đề bài

Mô tả

Farmer John có N con bò (2≤N≤3×105), được đánh số từ 1 đến N, xếp thành một hoán vị p1,p2,…,pN của các số từ 1 đến N.

Cho một xâu độ dài N−1 chỉ gồm các ký tự U (tăng) và D (giảm). Hãy tìm giá trị K lớn nhất (K≤N−1) sao cho tồn tại một dãy con a0,a1,…,aK của p (tức là chọn K+1 phần tử theo đúng thứ tự trong p) thỏa mãn:

  • Với mỗi j từ 1 đến K: nếu ký tự thứ j của xâu là U thì aj−1<aj, nếu là D thì aj−1>aj.

Nói cách khác, dãy con được chọn phải khớp với K ký tự đầu tiên của xâu. Lưu ý K=0 luôn thỏa mãn (chỉ chọn một phần tử).

Dữ liệu vào

  • Dòng 1: Số nguyên N.
  • Dòng 2: N số nguyên phân biệt p1,p2,…,pN, là một hoán vị của 1…N.
  • Dòng 3: Xâu độ dài N−1 gồm các ký tự U và D.

Dữ liệu ra

Một số nguyên duy nhất: giá trị K lớn nhất tìm được.

Ràng buộc

  • 2≤N≤3×105
  • p là hoán vị của 1…N
  • Xâu có độ dài N−1 và chỉ chứa U, D

Subtask:

  • Subtask 1 (9%): N≤500
  • Subtask 2 (18%): N≤5000
  • Subtask 3 (18%): Xâu gồm các ký tự U rồi đến các ký tự D (có thể không có phần nào)
  • Subtask 4 (55%): Không có ràng buộc thêm

Ví dụ

Input Output Giải thích
5
1 5 3 4 2
UDUD
4 Cả hoán vị [1,5,3,4,2] khớp mẫu UDUD: 1<5>3<4>2, nên K=N−1=4.
5
1 5 3 4 2
UUDD
3 Dãy con [1,3,4,2] (các vị trí 1, 3, 4, 5) khớp UUDD: 1<3<4>2, cho K=3. Không đạt được K=4 vì phải dùng cả 5 phần tử, mà [1,5,3,4,2] không khớp UUDD.

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