trang chủ / bài tập / shavebvr

Cạo lông hải ly

Đề bài

Mô tả

Cho một hoán vị a1,a2,,an của {1,2,,n}.

Một đoạn giá trị [x,y] (1x<yn) được gọi là liên tiếp trong hoán vị nếu tồn tại các chỉ số i1<i2<<ik sao cho ai1=x, ai2=x+1, , aik=y. Nói cách khác, các giá trị x,x+1,,y xuất hiện trong hoán vị theo đúng thứ tự tăng dần (không nhất thiết kề nhau).

Nếu không thể xử lý đoạn [x,y] trong một lần, ta chia nó thành các đoạn con [x,p1],[p1+1,p2],,[pm+1,y] sao cho mỗi đoạn con là liên tiếp. Khi đó cần m+1 lần xử lý. Hãy tìm số lần xử lý tối thiểu cho mỗi truy vấn.

Bạn cần xử lý q truy vấn thuộc hai loại:

  • 1 x y — tính số lần xử lý tối thiểu cho đoạn giá trị [x,y].
  • 2 x y — hoán đổi hai phần tử ở vị trí xy (tức là axay).

Dữ liệu vào

  • Dòng đầu chứa số nguyên n.
  • Dòng thứ hai chứa n số nguyên là hoán vị ban đầu a1,a2,,an.
  • Dòng thứ ba chứa số nguyên q.
  • q dòng tiếp theo, mỗi dòng chứa ba số nguyên pi xi yi mô tả một truy vấn.

Dữ liệu ra

Với mỗi truy vấn loại 1, in ra số lần xử lý tối thiểu trên một dòng.

Ràng buộc

  • 2n3·105
  • 1q105
  • 1xi<yin
  • a luôn là một hoán vị của {1,2,,n} trong suốt quá trình truy vấ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
Hoán vị ban đầu: [1,3,4,2,5]. Truy vấn 1 [1,5]: chia thành [1,1], [2,5] — cần 2 lần. Truy vấn 2 [3,4]: 3,4 đã xuất hiện theo thứ tự, 1 lần. Sau swap vị trí 2 và 3: [1,4,3,2,5]. Truy vấn [1,5]: chia [1,2],[3,3],[4,5] — 3 lần. Sau swap vị trí 1 và 5: [5,4,3,2,1]. Truy vấn [1,5]: phải chia thành 5 đoạn — 5 lần.
6
6 5 4 3 2 1
3
1 1 6
2 1 6
1 1 6
6
4
Hoán vị giảm dần [6,5,4,3,2,1], đoạn [1,6] phải chia thành 6 đoạn đơn lẻ. Sau khi swap vị trí 1 và 6, hoán vị thành [1,5,4,3,2,6]. Đoạn [1,6] chia thành [1,2],[3,3],[4,4],[5,6] — cần 4 lần xử lý.

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