trang chủ / đề bài / dhbb23_clk_10_a

Sắp xếp

Đề bài

Mô tả

Hôm nay Tí và Tèo chơi một trò chơi về số nguyên. Tí có một dãy số nguyên không âm a1,a2,…,an. Tí cần sắp xếp dãy theo thứ tự không giảm chỉ bằng thao tác sau: chọn hai chỉ số i,j (1≤i<j≤n), sau đó đảo ngược đoạn từ i đến j (tức là đoạn ai,ai+1,…,aj trở thành aj,aj−1,…,ai).

Tí muốn Tèo sắp xếp dãy a1,a2,…,an theo yêu cầu trên với số thao tác không vượt quá 2·n. Tèo chưa biết cách thực hiện nên mong muốn bạn giúp đỡ.

Dữ liệu vào

  • Dòng đầu tiên chứa số nguyên dương n.
  • Dòng thứ hai gồm n số nguyên không âm a1,a2,…,an (ai≤109).

Dữ liệu ra

  • Dòng đầu tiên ghi số nguyên s (0≤s≤2·n) là số thao tác cần thực hiện.
  • s dòng tiếp theo, mỗi dòng ghi hai số nguyên i,j (1≤i<j≤n) mô tả một thao tác đảo ngược đoạn từ i đến j. Các thao tác được thực hiện lần lượt theo thứ tự in ra.

Sau khi thực hiện s thao tác, dãy phải được sắp xếp theo thứ tự không giảm. Không cần số thao tác ít nhất; nếu có nhiều cách, in ra một cách bất kỳ.

Ràng buộc

  • 1≤n≤105.
  • 0≤ai≤109.

Subtasks

  • Subtask 1 (40% số điểm): n≤103.
  • Subtask 2 (60% số điểm): không có ràng buộc gì thêm (n≤105).

Ví dụ

Input Output Giải thích
4
0 1 0 1
1
2 3
Đảo ngược đoạn từ 2 đến 3: dãy thành 0,0,1,1.
5
3 1 4 1 5
3
1 2
2 4
3 4
Dãy lần lượt thành 1,3,4,1,5, rồi 1,1,4,3,5, rồi 1,1,3,4,5. In ra cách khác hợp lệ cũng được chấp nhận, ví dụ 2 thao tác: 3 4 rồi 1 3.

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