Điểm:
450 (p)
Thời gian:
1.0s
Bộ nhớ:
256M
Input:
bàn phím
Output:
màn hình
Cho số nguyên \(A\) gồm \(N\) phần tử gồm các số nguyên dương \(A_1, A_2, ..., A_N\). Cho \(Q\) thao tác được thực hiện lần lượt bao gồm gán, truy vấn và quay lại: (Gọi \(T\) là số lần gán. Ban đầu \(T = 0\)).
- Thao tác gán có dạng: \(1\) \(p\) \(val\): Gán \(A_p = val\) (\(1 \leq p \leq N\), \(1 \leq val \leq 10^9\)). Và \(T\) sẽ tăng lên \(1\).
- Thao tác truy vấn có dạng: \(2\) \(u\) \(v\) \(t\): Tìm giá trị lớn nhất trong đoạn từ \(u\) tới \(v\) sau phép gán lần thứ \(t\) (\(1 \leq u \leq v \leq N\), \(0 \leq t \leq T\). Nếu \(t = 0\) thì sẽ truy vấn trên mảng ban đầu trước khi thực hiện \(Q\) thao tác).
- Thao tác quay lại có dạng: \(3\) \(t\): Quay lại thời điểm sau lần gán thứ \(t\) (\(0 \leq t \leq T\). Nếu \(t = 0\) thì sẽ quay về mảng ban đầu trước khi thực hiện \(Q\) thao tác). Mọi thao tác gán sau thời điểm \(t\) sẽ bị xoá bỏ. Và \(T = t\).
Yêu cầu
Thực hiện lần lượt \(Q\) thao tác. Với thao tác loại \(2\) (Truy vấn), in ra kết quả.
Dữ liệu vào
- Dòng thứ nhất chứa hai số nguyên dương \(N\) và \(Q\).
- Dòng thứ hai chứa \(N\) số nguyên dương \(A_1, A_2, ..., A_N\) (\(A_i \leq 10^9\)).
- \(Q\) dòng tiếp theo, mỗi dòng là một thao tác gán, truy vấn hoặc quay lại: \(1\) \(p\) \(val\) hoặc \(2\) \(u\) \(v\) \(t\) hoặc \(3\) \(t\).
Kết quả
Với thao tác loại \(2\), in ra kết quả trên một dòng.
Ràng buộc
- \(30\%\) số test đầu tiên tương đương với \(30\%\) số điểm có \(N, Q \leq 10^3\).
- \(30\%\) số test tiếp theo tương đương với \(30\%\) số điểm có \(N, Q \leq 10^5\), không có thao tác \(3\), mọi thao tác \(2\) có \(t = T\)
- \(40\%\) số test còn lại tương đương với \(40\%\) số điểm có \(N, Q \leq 10^5\).
Ví dụ
Input:
5 8
1 5 4 7 8
1 3 2
2 2 4 0
1 1 5
1 4 6
2 1 5 2
2 3 4 3
3 1
2 3 4 1
Output:
7
8
6
7
Bình luận