만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

괄호 부분 문자열 쿼리

시간 제한2초메모리 제한512 MB

요약
각 질의가 주는 부분 문자열에서 가장 긴 괄호 문자열 부분 수열의 길이를 구한다.
난이도

보통10점 중 7점

유형
누적 합, 문자열, 이분 탐색, 정렬
정답자
아직 제출이 없습니다

문제

괄호 문자열을 다음과 같이 정의한다.

  1. 빈 문자열은 괄호 문자열이다.
  2. SS가 괄호 문자열이면 (S)(S)도 괄호 문자열이다.
  3. SS와 TT가 괄호 문자열이면 STST도 괄호 문자열이다.
  4. 괄호 문자열은 위 세 규칙으로만 만들 수 있다.

'('와 ')'로 이루어진 문자열 S=s1s2…sNS = s_1 s_2 \dots s_N과 쿼리 MM개가 주어진다. 각 쿼리는 두 정수 lil_i, rir_i (1≤li≤ri≤N1 \le l_i \le r_i \le N)로 이루어진다.

각 쿼리마다 부분 문자열 slisli+1…sris_{l_i} s_{l_i + 1} \dots s_{r_i}의 부분 수열 중에서 괄호 문자열이면서 가장 긴 것의 길이를 구한다.

문자열 S=s1s2…sNS = s_1 s_2 \dots s_N의 길이가 ∣x∣|x|인 부분 수열은 1≤k1<k2<⋯<k∣x∣≤N1 \le k_1 < k_2 < \dots < k_{|x|} \le N을 만족하는 문자열 x=sk1sk2…sk∣x∣x = s_{k_1} s_{k_2} \dots s_{k_{|x|}}을 뜻한다.

입력

첫째 줄에 문자열 SS가 주어진다. SS는 '('와 ')'로만 이루어지고, 길이 NN은 1≤N≤1061 \le N \le 10^6을 만족한다.

둘째 줄에 쿼리의 개수 MM이 주어진다. (1≤M≤1051 \le M \le 10^5)

셋째 줄부터 MM개의 줄에 걸쳐 각 쿼리의 lil_i와 rir_i가 공백을 사이에 두고 주어진다.

출력

각 쿼리의 답을 입력에 주어진 순서대로 한 줄에 하나씩 출력한다.

예제4

  1. 예제 1

    입력
    ())(())(())(
    7
    1 1
    2 3
    1 2
    1 12
    8 12
    5 11
    2 10
    
    예상 출력
    0
    0
    2
    10
    4
    6
    6
    
  2. 예제 2

    입력
    (
    1
    1 1
    
    예상 출력
    0
    
  3. 예제 3

    입력
    )
    1
    1 1
    
    예상 출력
    0
    
  4. 예제 4

    입력
    ()
    3
    1 1
    2 2
    1 2
    
    예상 출력
    0
    0
    2