Truy vấn khó
Đề bài
Mô tả
Lokk yêu thích cấu trúc dữ liệu, và thú tiêu khiển ưa thích của Lokk là nghĩ ra những bài toán cấu trúc dữ liệu mới lạ rồi thách bạn bè giải. Hôm nay, Lokk nghĩ ra bài toán dưới đây và gửi cho Quang.
Cho mảng gồm phần tử . Nhiệm vụ của bạn là xử lý truy vấn thuộc các loại sau:
- 1 : Hoán đổi hai phần tử và .
- 2 : Tính tổng bình phương của tất cả các vị trí từ đến có phần tử bằng . Nói cách khác, tính , trong đó là biểu thức có giá trị nếu đúng và nếu ngược lại.
- 3 : Gọi là mảng gồm tất cả các vị trí trong mảng có phần tử bằng , liệt kê theo thứ tự tăng dần (từ đến ). Tính .
Là một người giải bài xuất sắc, Quang nhanh chóng giải xong bài toán. Vì vậy, Lokk đặt thêm một thử thách: Quang phải trả lời các truy vấn trực tuyến, nghĩa là các truy vấn được mã hóa sao cho cần biết đáp án đúng của truy vấn hiện tại mới giải mã được truy vấn tiếp theo.
Điều này quá sức với Quang, nên Quang bỏ cuộc và nhờ các thí sinh giúp đỡ. Bạn có giải được không?
Dữ liệu vào
Dòng đầu tiên chứa hai số nguyên và (, ), độ dài mảng và số truy vấn cần xử lý.
Dòng thứ hai chứa số nguyên (), các phần tử của mảng .
Mỗi dòng trong dòng tiếp theo mô tả một truy vấn cần xử lý. Số đầu tiên là (), loại truy vấn. Các truy vấn được mã hóa như sau: gọi là đáp án của truy vấn loại hoặc gần nhất mà bạn đã trả lời (ban đầu ).
Nếu , tiếp theo là một số nguyên (). Giải mã truy vấn bằng phép tính .
Nếu hoặc , tiếp theo là ba số nguyên , và (). Giải mã truy vấn bằng các phép tính sau:
- Nếu , hoán đổi và .
Với , dữ liệu bảo đảm không vượt quá độ dài của mảng (định nghĩa trong mô tả truy vấn).
Dữ liệu ra
Với mỗi truy vấn loại hoặc , in ra một số nguyên là đáp án của truy vấn.
Ràng buộc
- ,
- ;
- Với truy vấn loại , sau khi giải mã không vượt quá độ dài mảng .
Ví dụ
| Input | Output | Giải thích |
|---|---|---|
| 7 8 1 2 1 3 2 1 2 2 1 6 1 3 6 5 4 2 3 3 6 2 1 7 5 1 6 2 6 1 1 3 7 6 5 2 4 4 7 |
46 45 0 0 10 58 36 |
Truy vấn 1 sau giải mã là 2 1 6 1: các vị trí từ đến có phần tử bằng là , , , đáp án . Truy vấn 2 là 3 2 3 1: , đáp án . Truy vấn 3 là 2 6 6 2: , đáp án . Truy vấn 4 là 2 1 7 5: không có phần tử nào bằng , đáp án . Truy vấn 5 là 1 6: hoán đổi và , mảng thành . Truy vấn 6 là 2 1 6 1, đáp án . Truy vấn 7 là 3 2 3 1, đáp án . Truy vấn 8 là 2 6 6 2, đáp án . |
| 5 4 3 1 3 2 3 2 1 5 3 1 2 3 2 1 3 2 5 2 4 |
35 13 16 |
Ví dụ bổ sung. Các truy vấn sau giải mã: 2 1 5 3 (đáp án ); 1 1 (mảng thành ); 3 1 2 3 (, được hoán đổi; , đáp án ); 2 3 5 2 (đáp án ). |
Bình luận