Cạo lông hải ly
Đề bài
Mô tả
Cho một hoán vị của .
Một đoạn giá trị () được gọi là liên tiếp trong hoán vị nếu tồn tại các chỉ số sao cho . Nói cách khác, các giá trị 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 trong một lần, ta chia nó thành các đoạn con sao cho mỗi đoạn con là liên tiếp. Khi đó cần 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ý truy vấn thuộc hai loại:
- — tính số lần xử lý tối thiểu cho đoạn giá trị .
- — hoán đổi hai phần tử ở vị trí và (tức là và ).
Dữ liệu vào
- Dòng đầu chứa số nguyên .
- Dòng thứ hai chứa số nguyên là hoán vị ban đầu .
- Dòng thứ ba chứa số nguyên .
- dòng tiếp theo, mỗi dòng chứa ba số nguyên mô tả một truy vấn.
Dữ liệu ra
Với mỗi truy vấn loại , in ra số lần xử lý tối thiểu trên một dòng.
Ràng buộc
- luôn là một hoán vị của 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: . Truy vấn 1 : chia thành , — cần 2 lần. Truy vấn 2 : đã xuất hiện theo thứ tự, 1 lần. Sau swap vị trí 2 và 3: . Truy vấn : chia — 3 lần. Sau swap vị trí 1 và 5: . Truy vấn : 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 , đoạn phải chia thành 6 đoạn đơn lẻ. Sau khi swap vị trí 1 và 6, hoán vị thành . Đoạn chia thành — cần 4 lần xử lý. |
Bình luận