Sắp xếp bằng cách dời đầu cuối

Đề bài

Mô tả

Cho mảng a gồm n số nguyên (mảng có thể chứa các phần tử bằng nhau). Bạn được phép thực hiện hai loại thao tác:

  1. Chọn một chỉ số i bất kỳ (1in) và chuyển phần tử ai lên đầu mảng.
  2. Chọn một chỉ số i bất kỳ (1in) và chuyển phần tử ai xuống cuối mảng.

Ví dụ với n=5, a=[4,7,2,2,9]: sau khi áp dụng thao tác loại 1 lên phần tử thứ hai, mảng trở thành [7,4,2,2,9]; tiếp đó áp dụng thao tác loại 2 lên phần tử thứ hai, mảng trở thành [7,2,2,9,4].

Bạn có thể thực hiện các thao tác thuộc hai loại trên với số lần tùy ý, theo thứ tự tùy ý.

Hãy tìm số thao tác ít nhất cần thực hiện để mảng a được sắp xếp không giảm, tức là a1a2an.

Dữ liệu vào

  • Dòng đầu chứa một số nguyên t: số lượng bộ dữ liệu.
  • Mỗi bộ dữ liệu gồm hai dòng:
    • Dòng thứ nhất chứa số nguyên n: kích thước mảng a.
    • Dòng thứ hai chứa n số nguyên a1,a2,,an.

Dữ liệu ra

Với mỗi bộ dữ liệu, in ra trên một dòng một số nguyên là số thao tác ít nhất cần thực hiện.

Ràng buộc

  • 1t104
  • 1n2·105
  • 0ai109
  • Tổng của n trên tất cả các bộ dữ liệu không vượt quá 2·105.

Ví dụ

Input Output Giải thích
3
5
4 7 2 2 9
5
3 5 8 1 7
5
1 2 2 4 5
2
2
0
Bộ 1: chuyển hai số 2 lên đầu mảng, [4,7,2,2,9][2,4,7,2,9][2,2,4,7,9].
Bộ 2: chuyển số 1 lên đầu và số 8 xuống cuối, [3,5,8,1,7][1,3,5,8,7][1,3,5,7,8].
Bộ 3: mảng đã được sắp xếp sẵn.
5
2
0 1
3
0 1 0
4
0 1 0 0
4
0 1 0 1
4
0 1 0 2
0
1
1
1
1
Bộ 2: chuyển số 1 xuống cuối, [0,1,0][0,0,1].
Bộ 4: giữ nguyên a1=0, a3=0, a4=1 và chuyển a2=1 xuống cuối.
1
20
16 15 1 10 0 14 0 10 3 9 2 5 4 5 17 9 10 20 0 9
16 Nhiều nhất chỉ giữ nguyên được 4 phần tử, chẳng hạn hai số 5 ở vị trí 12, 14 rồi hai số 9 ở vị trí 16, 20; 16 phần tử còn lại đều nhỏ hơn hoặc bằng 5 (đưa lên đầu) hoặc lớn hơn hoặc bằng 9 (đưa xuống cuối). Lưu ý mảng này có dãy con không giảm dài tới 7 phần tử, nhưng không thể giữ nguyên cả 7.

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.400 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.2 gforth 0.7.3 gfortran 12.2.0 go 1.27.0 groovyc 5.1.1 javac 25.0.4 node 26.8.1 julia 1.12.7 kotlinc 2.4.10 lean 4.33.1 sbcl 2.2.9 lua 5.4.9 nim 2.2.10 fpc 3.2.2 fpc-themis 3.2.2 perl 5.36.0 php 8.5.10 pike 8.0 swipl 9.0.4 pypy3 7.3.23 python3 3.14.7 racket 8.7 ruby 4.0.6 rustc 1.98.0 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 swiftc 6.3.3 tclsh 8.6 bun 1.4.0 deno 2.9.6 v 0.5.2 zig 0.16.0