Phân loại chỉ số theo LIS

Đề bài

Mô tả

Cho dãy a gồm n phần tử a1,a2,,an.

Một dãy con ai1,ai2,,aik với 1i1<i2<<ikn được gọi là tăng nếu ai1<ai2<<aik. Một dãy con tăng được gọi là dài nhất nếu nó có độ dài lớn nhất trong tất cả các dãy con tăng của a (viết tắt: LIS).

Một dãy có thể có nhiều LIS khác nhau. Hãy phân loại mọi chỉ số i (1in) vào ba nhóm:

  1. Nhóm gồm các chỉ số iai không thuộc bất kỳ LIS nào.
  2. Nhóm gồm các chỉ số iai thuộc ít nhất một nhưng không phải tất cả các LIS.
  3. Nhóm gồm các chỉ số iai thuộc tất cả các LIS.

Dữ liệu vào

  • Dòng đầu chứa số nguyên n: số phần tử 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 xâu gồm n ký tự. Ký tự thứ i là '1', '2' hoặc '3' tương ứng với nhóm mà chỉ số i thuộc về.

Ràng buộc

  • 1n105
  • 1ai105

Ví dụ

Input Output Giải thích
4
1 3 2 5
3223 Dãy có đúng 2 LIS độ dài 3: {a1,a2,a4}={1,3,5}{a1,a3,a4}={1,2,5}. Chỉ số 1 và 4 thuộc cả hai LIS (nhóm 3), chỉ số 2 và 3 mỗi cái chỉ thuộc một LIS (nhóm 2).
4
1 5 2 3
3133 Dãy có duy nhất 1 LIS độ dài 3 là {a1,a3,a4}={1,2,3}. Các chỉ số 1, 3, 4 thuộc LIS duy nhất đó (nhóm 3); chỉ số 2 không thuộc LIS nào (nhóm 1).
2
5 4
22 LIS có độ dài 1. Cả {a1}{a2} đều là LIS, nên mỗi chỉ số thuộc một LIS nhưng không thuộc cả hai (nhóm 2).

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