올바른 괄호 문자열과 쿼리
시간 제한2초메모리 제한1024 MB
문자열의 한 글자를 바꾸는 갱신과 구간 질의가 주어질 때, 구간의 '*'를 채워 올바른 괄호 문자열을 만들 수 있는지 판단합니다.
문제
이 문제는 출제자가 어떤 온라인 저지의 문제에서 영감을 얻어, 내용을 거의 그대로 가져와 조금만 수정한 문제입니다.
올바른 괄호 문자열은 다음과 같이 정의된 문자열의 특성입니다.
- 빈 문자열 은 올바른 괄호 문자열입니다.
- 가 올바른 괄호 문자열이라면, 를 괄호로 둘러싼 또한 올바른 괄호 문자열입니다.
- 와 가 올바른 괄호 문자열이라면, 둘을 붙인 또한 올바른 괄호 문자열입니다.
길이가 이며 '(', ')', '*'로만 이루어진 문자열 가 주어집니다. 여러분은 다음 두 종류의 쿼리 개를 처리해야 합니다.
1: 의 번째 문자를 로 바꿉니다. 는'(',')','*'중 하나입니다. ()2: 부분 문자열 에 있는'*'를 각각 임의로'(',')', 또는 빈 문자열 중 하나로 바꿉니다. 그다음 으로 바꾼 부분을 뺀 나머지를 원래 순서대로 이어 붙였을 때 올바른 괄호 문자열을 만들 수 있는지 구합니다. ()
과연 여러분은 충분히 빠르게 모든 쿼리를 해결할 수 있을까요?
입력
첫 번째 줄에 문자열 의 길이 과 쿼리의 수 가 공백으로 구분되어 주어집니다. ()
두 번째 줄에 길이 의 문자열 가 주어집니다. 의 모든 문자는 '(', ')', '*' 중 하나입니다.
세 번째 줄부터 개의 줄에 걸쳐 쿼리가 한 줄에 하나씩 주어집니다. 각 쿼리는 위에서 설명한 두 종류 중 하나입니다.
출력
2번 쿼리마다 부분 문자열을 올바른 괄호 문자열로 만들 수 있으면 'Yes', 없으면 'No'를 새 줄에 출력합니다.