RMQ trên mảng vòng tròn

Đề bài

Mô tả

Cho một mảng vòng tròn a0,a1,…,an−1. 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 [lf,rg] (bao gồm hai đầu mút) thêm v.
  • rmq(lf, rg) — trả về giá trị nhỏ nhất trên đoạn [lf,rg] (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 lf≤rg thì đoạn gồm các chỉ số lf,lf+1,…,rg; còn nếu lf>rg thì đoạn "vòng qua" cuối mảng, gồm các chỉ số lf,lf+1,…,n−1,0,1,…,rg.

Ví dụ với n=5, lf=3, rg=1 thì đoạn gồm các chỉ số 3,4,0,1.

Dữ liệu vào

  • Dòng đầu chứa số nguyên n.
  • Dòng thứ hai chứa n số nguyên a0,a1,…,an−1 — trạng thái ban đầu của mảng.
  • Dòng thứ ba chứa số nguyên m — số thao tác.
  • m 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 lf, rg thì đó là thao tác rmq(lf, rg).
    • Nếu dòng chứa ba số nguyên lf, rg, v 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

  • 1≤n≤2·105
  • −106≤ai≤106
  • 0≤m≤2·105
  • 0≤lf,rg≤n−1
  • −106≤v≤106

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

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.47 awk 1.3.4 gcc 16.2.0 dotnet 10.0.402 g++ 16.2.0 g++-themis 16.2.0 g++17 16.2.0 g++20 16.2.0 g++23 16.2.0 clang++ 22.1.8 dmd 2.113.0 dart 3.13.6 gforth 0.7.3 gfortran 15.3.0 go 1.27.3 groovyc 5.1.3 javac 26.0.2.1 node 26.12.1 julia 1.13.2 kotlinc 2.4.21 lean 4.35.0 sbcl 2.2.9 lua 5.5.1 nim 2.2.12 fpc 3.2.2 fpc-themis 3.2.2 perl 5.42.3 php 8.5.12 pike 8.0 swipl 9.0.4 pypy3 7.3.23 python3 3.15.1 racket 8.7 ruby 4.0.8 rustc 1.99.1 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 swiftc 6.4.1 tclsh 8.6 bun 1.4.4 deno 2.9.8 v 0.5.2 zig 0.17.0