trang chủ / đề bài / permsess

Phiên xử lý tối thiểu

Đề bài

Mô tả

Cho hoán vị a1,a2,…,an của các số từ 1 đến n.

Với hai giá trị x≤y, ta nói đoạn giá trị [x,y] xử lý được trong một phiên nếu các giá trị x,x+1,…,y xuất hiện trong hoán vị theo đúng thứ tự tăng dần, tức là tồn tại các chỉ số i1<i2<⋯<ik sao cho ai1=x, ai2=x+1, ..., aik=y.

Nếu đoạn [x,y] không xử lý được trong một phiên, ta phải chia nó thành các đoạn con liên tiếp [x,p1],[p1+1,p2],…,[pm+1,y] với x≤p1<p2<⋯<pm<y, sao cho mỗi đoạn con xử lý được trong một phiên. Khi đó cần m+1 phiên.

Hãy xử lý q truy vấn thuộc hai loại:

  • 1 x y — in ra số phiên tối thiểu cần để xử lý các giá trị từ x đến y.
  • 2 x y — hoán đổi hai phần tử đang đứng ở vị trí x và vị trí y (tức là đổi chỗ ax và ay).

Lưu ý ở truy vấn loại 1 thì x,y là giá trị, còn ở truy vấn loại 2 thì x,y là vị trí trong hoán vị.

Dữ liệu vào

  • Dòng đầu chứa số nguyên n — độ dài hoán vị.
  • Dòng thứ hai chứa n số nguyên a1,a2,…,an — hoán vị ban đầu.
  • Dòng thứ ba chứa số nguyên q — số truy vấn.
  • q dòng tiếp theo, mỗi dòng chứa ba số nguyên ti, xi, yi mô tả một truy vấn như trên (ti∈{1,2}).

Dữ liệu ra

Với mỗi truy vấn loại 1, in ra trên một dòng số phiên tối thiểu tương ứng.

Ràng buộc

  • 2≤n≤3·105
  • a là một hoán vị của 1,2,…,n
  • 1≤q≤105
  • 1≤xi<yi≤n

Ví dụ

Input Output Giải thích
5
1 3 4 2 5
6
1 1 5
1 3 4
2 2 3
1 1 5
2 1 5
1 1 5
2
1
3
5
Ban đầu a=[1,3,4,2,5]. Đoạn [1,5] chia được thành [1,2] (giá trị 1 ở vị trí 1, giá trị 2 ở vị trí 4) và [3,5] (các vị trí 2,3,5), tổng cộng 2 phiên. Đoạn [3,4] chỉ cần 1 phiên vì 3 đứng ngay trước 4. Sau khi đổi chỗ vị trí 2 và 3 ta có a=[1,4,3,2,5], đoạn [1,5] cần 3 phiên: [1,2],[3,3],[4,5]. Sau khi đổi chỗ vị trí 1 và 5 ta có a=[5,4,3,2,1], hoàn toàn đảo ngược nên mỗi giá trị là một phiên riêng: 5 phiên.
2
2 1
5
1 1 2
2 1 2
1 1 2
2 1 2
1 1 2
2
1
2
Ban đầu a=[2,1]: giá trị 1 đứng sau giá trị 2 nên cần 2 phiên. Sau lần đổi chỗ đầu tiên a=[1,2], chỉ cần 1 phiên. Sau lần đổi chỗ thứ hai a trở lại [2,1] nên lại cần 2 phiên.

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