trang chủ / bài tập / brackets

Sereja và dãy ngoặc

Đề bài

Mô tả

Cho một dãy ngoặc s độ dài n, gồm các ký tự "(" và ")".

Bạn cần trả lời m truy vấn. Mỗi truy vấn cho hai số nguyên lr (1lrn). Với mỗi truy vấn, hãy tìm độ dài của dãy ngoặc con đúng dài nhất của đoạn sl,sl+1,,sr.

Một dãy con của s thu được bằng cách xóa đi một số ký tự (có thể không xóa) và giữ nguyên thứ tự các ký tự còn lại.

Một dãy ngoặc đúng là dãy có thể biến thành một biểu thức số học hợp lệ bằng cách chèn thêm "1" và "+". Ví dụ, "()()" và "(())" là đúng, còn ")(" và "(" thì không.

Dữ liệu vào

  • Dòng đầu chứa dãy ký tự s1s2sn, mỗi ký tự là "(" hoặc ")".
  • Dòng thứ hai chứa số nguyên m, số lượng truy vấn.
  • m dòng tiếp theo, mỗi dòng chứa hai số nguyên liri, mô tả truy vấn thứ i.

Dữ liệu ra

In ra m dòng, dòng thứ i là đáp án của truy vấn thứ i theo đúng thứ tự trong dữ liệu vào.

Ràng buộc

  • 1n106
  • 1m105
  • 1lirin

Ví dụ

Input Output Giải thích
())(())(())(
7
1 1
2 3
1 2
1 12
8 12
5 11
2 10
0
0
2
10
4
6
6
Truy vấn 3 (đoạn "()"): dãy con đúng dài nhất là "()", độ dài 2. Truy vấn 4 (cả xâu): dãy con đúng dài nhất là "()(())(())", độ dài 10.
)(
1
1 2
0 Đoạn ")(" không chứa dãy ngoặc đúng nào khác rỗng, đáp án là 0.

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.46 awk 1.3.4 gcc 16.1.0 csc 6.12.0.200 g++ 16.1.0 g++-themis 16.1.0 g++17 16.1.0 g++20 16.1.0 g++23 16.1.0 clang++ 22.1.6 dmd 2.112.0 dart 3.12.1 gforth 0.7.3 gfortran 12.2.0 go 1.26.3 groovyc 5.0.6 javac 25.0.3 node 26.2.0 kotlinc 2.3.21 sbcl 2.2.9 lua 5.4.8 nim 2.2.10 fpc 3.2.2 fpc-themis 3.2.2 perl 5.36.0 php 8.5.6 pike 8.0 pypy3 7.3.23 python3 3.14.5 racket 8.7 ruby 4.0.5 rustc 1.96.0 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 tclsh 8.6 bun 1.3.14 deno 2.8.1 v 0.5.1 zig 0.16.0