Cho một chuỗi gồm các ngoặc vuông và ngoặc tròn, có thể thực hiện thay đổi dấu ngoặc bằng các thao tác sau:
Đổi hướng của ngoặc từ mở thành đóng hoặc ngược lại nhưng không thay đổi tính chất của ngoặc, thao tác này có chi phí là 0.
Ví dụ: có thể đổi
(
thành)
và)
thành(
; có thể đổi[
thành]
và]
thành[
.
Đổi bất kì ngoặc vuông thành ngoặc tròn mà không thay đổi hướng, thao tác này có chi phí là 1.
Ví dụ: có thể đổi
[
thành(
nhưng không được(
thành[
; tương tự, có thể đổi]
thành)
nhưng không được)
thành]
.
Các thao tác này có thể được thực hiện với bất kì thứ tự nào cũng như không giới hạn số lần thực hiện.
Cho một chuỗi S có độ dài N và Q câu hỏi có dạng "l r" (1 \leq l < r \leq N). Với mỗi đoạn S[l .. r] hãy cho biết chi phí thấp nhất để sửa thành một dãy ngoặc hợp lệ.
Một dãy ngoặc được coi là hợp lệ nếu thoả mãn những quy tắc sau:
(
, )
, [
, ]
} ).Biết rằng, tổng độ dài của N ở tất cả các bộ kiểm thử (testcase) không vượt quá 10^6, tổng độ dài của Q ở tất cả các test không vượt quá 2 \times 10^5.
Với mỗi câu hỏi, yêu cầu in ra một dòng chứa một số nguyên x (x \geq 0) có chi phí thấp nhất để chỉnh sửa dãy ngoặc S[l .. r] thành một dãy ngoặc hợp lệ.
Dữ liệu vào Sao chép |
2 6 2 ]]]]]] 1 4 2 3 12 3 ([(]]][(()]) 1 12 3 6 1 4 |
Dữ liệu ra Sao chép |
0 0 0 1 2 |
Giải thích ví dụ:
([([][][])()])
với chi phí là 0.(]]]
, có thể được chuyển thành ([])
với chi phí là 1.([(]
, có thể được chuyển thành ()()
với chi phí là 2.