아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

Qarentheziz 수열

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

요약
괄호 문자열의 구간을 뒤집는 쿼리를 처리하며, 질의된 부분 문자열을 균형 잡힌 괄호 문자열로 만드는 최소 연산 횟수를 구합니다.
난이도

어려움10점 중 8점

유형
세그먼트 트리, 문자열, 그리디
정답자
아직 제출이 없습니다

문제

Ryan은 (와 )로만 이루어진 문자열에 관심이 많다. 특히 균형 잡힌 문자열을 좋아한다. 균형 잡힌 문자열은 다음 규칙으로 만들 수 있다.

  • ()는 균형 잡힌 문자열이다.
  • 균형 잡힌 문자열 두 개를 이어 붙인 문자열은 균형 잡힌 문자열이다.
  • TT가 균형 잡힌 문자열이면, (, TT, )를 이 순서대로 이어 붙인 문자열은 균형 잡힌 문자열이다.

예를 들어 ()()와 (()())는 균형 잡힌 문자열이다. )(, )()((), (는 균형 잡힌 문자열이 아니다.

Ryan은 문자열 TT의 슬픔을 TT를 균형 잡힌 문자열로 만드는 데 필요한 연산의 최소 횟수로 정의한다. 연산은 임의의 순서로, 임의의 횟수만큼 사용할 수 있다.

  • TT의 맨 앞에 )를 추가한다.
  • TT의 맨 뒤에 (를 추가한다.
  • TT의 인접한 두 문자를 서로 바꾼다.

Ryan은 (와 )로만 이루어진 길이 NN의 문자열 SS를 갖고 있다. QQ개의 질의를 주어진 순서대로 처리한다. 질의는 두 종류이다.

  • 1 l r: SS의 ll번째 문자부터 rr번째 문자까지(양 끝 포함) 각 문자를 확인해서, (는 )로, )는 (로 바꾼다.
  • 2 l r: SS의 ll번째 문자부터 rr번째 문자까지 부분 문자열의 슬픔을 출력한다.

입력

첫 줄에 두 정수 NN과 QQ(2≤N≤150 0002 \le N \le 150\,000, 1≤Q≤150 0001 \le Q \le 150\,000)가 공백으로 구분되어 주어진다. 둘째 줄에는 (와 )로만 이루어진 길이 NN의 문자열 SS가 주어진다. 이후 QQ개의 줄에는 각각 세 정수 tit_i, lil_i, rir_i(1≤ti≤21 \le t_i \le 2, 1≤li≤ri≤N1 \le l_i \le r_i \le N)가 공백으로 구분되어 주어진다. ti=2t_i = 2인 질의가 적어도 하나 있다.

출력

ti=2t_i = 2인 각 질의에 대해, lil_i번째 문자부터 rir_i번째 문자까지 부분 문자열의 슬픔을 한 줄에 하나씩 출력한다.

예제2

  1. 예제 1

    입력
    6 6
    ())()(
    2 1 6
    1 2 4
    2 1 4
    2 2 5
    1 1 5
    2 1 6
    
    예상 출력
    2
    5
    0
    6
    
  2. 예제 2

    입력
    7 5
    (((((()
    2 1 7
    1 1 7
    2 1 7
    2 3 3
    2 2 6
    
    예상 출력
    20
    26
    2
    20