RMQ trên mảng vòng tròn
Đề bài
Mô tả
Cho một mảng vòng tròn . Ta cần xử lý hai loại thao tác trên mảng này:
- inc(lf, rg, v) — tăng mỗi phần tử trên đoạn (bao gồm hai đầu mút) thêm .
- rmq(lf, rg) — trả về giá trị nhỏ nhất trên đoạn (bao gồm hai đầu mút).
Vì mảng là vòng tròn nên các đoạn cũng được hiểu theo nghĩa vòng tròn: nếu thì đoạn gồm các chỉ số ; còn nếu thì đoạn "vòng qua" cuối mảng, gồm các chỉ số .
Ví dụ với , , thì đoạn gồm các chỉ số .
Dữ liệu vào
- Dòng đầu chứa số nguyên .
- Dòng thứ hai chứa số nguyên — trạng thái ban đầu của mảng.
- Dòng thứ ba chứa số nguyên — số thao tác.
- dòng tiếp theo, mỗi dòng mô tả một thao tác:
- Nếu dòng chứa hai số nguyên , thì đó là thao tác rmq(lf, rg).
- Nếu dòng chứa ba số nguyên , , thì đó là thao tác inc(lf, rg, v).
Dữ liệu ra
Với mỗi thao tác rmq, in ra trên một dòng giá trị nhỏ nhất tương ứng.
Ràng buộc
Lưu ý rằng kết quả có thể vượt quá phạm vi số nguyên 32 bit.
Ví dụ
| Input | Output | Giải thích |
|---|---|---|
| 4 1 2 3 4 4 3 0 3 0 -1 0 1 2 1 |
1 0 0 |
rmq(3, 0) xét các chỉ số 3, 0 với giá trị 4, 1 → nhỏ nhất là 1. inc(3, 0, -1) làm mảng thành 0 2 3 3. rmq(0, 1) xét 0, 2 → 0. rmq(2, 1) xét các chỉ số 2, 3, 0, 1 với giá trị 3, 3, 0, 2 → 0. |
| 2 -1 -1 10 0 0 0 0 0 0 1 0 0 1 1 0 0 -1 0 0 0 0 0 1 1 1 0 0 0 -1 |
-1 -1 0 -1 |
Các thao tác inc chỉ tác động lên một phần tử; mỗi thao tác rmq lấy giá trị hiện tại của phần tử được hỏi. Bốn kết quả lần lượt là -1, -1, 0, -1. |
Bình luận