CF1625E2.Cats on the Upgrade (hard version)

普及/提高-

通过率:0%

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

This is the hard version of the problem. The only difference between the easy and the hard versions are removal queries, they are present only in the hard version.

"Interplanetary Software, Inc." together with "Robots of Cydonia, Ltd." has developed and released robot cats. These electronic pets can meow, catch mice and entertain the owner in various ways.

The developers from "Interplanetary Software, Inc." have recently decided to release a software update for these robots. After the update, the cats must solve the problems about bracket sequences. One of the problems is described below.

First, we need to learn a bit of bracket sequence theory. Consider the strings that contain characters "(", ")" and ".". Call a string regular bracket sequence (RBS), if it can be transformed to an empty string by one or more operations of removing either single "." characters, or a continuous substring "()". For instance, the string "(()(.))" is an RBS, as it can be transformed to an empty string with the following sequence of removals:

"(()(.))" \rightarrow "(()())" \rightarrow "(())" \rightarrow "()" \rightarrow "". We got an empty string, so the initial string was an RBS. At the same time, the string ")(" is not an RBS, as it is not possible to apply such removal operations to it.

An RBS is simple if this RBS is not empty, doesn't start with ".", and doesn't end with ".".

Denote the substring of the string ss as its sequential subsegment. In particular, s[lr]=slsl+1srs[l\dots r] = s_ls_{l+1}\dots s_r , where sis_i is the ii -th character of the string ss .

Now, move on to the problem statement itself. You are given a string ss , initially consisting of characters "(" and ")". You need to answer the following queries:

  1. Given two indices, ll and rr ( 1l<rn1 \le l < r \le n ). It's guaranteed that the ll -th character is equal to "(", the rr -th character is equal to ")", and the characters between them are equal to ".". Then the ll -th and the rr -th characters must be set to ".".
  2. Given two indices, ll and rr ( 1l<rn1 \le l < r \le n ), and it's guaranteed that the substring s[lr]s[l\dots r] is a simple RBS. You need to find the number of substrings in s[lr]s[l\dots r] such that they are simple RBS. In other words, find the number of index pairs ii , jj such that li<jrl \le i < j \le r and s[ij]s[i\dots j] is a simple RBS.

You are an employee in "Interplanetary Software, Inc." and you were given the task to teach the cats to solve the problem above, after the update.

输入格式

The first line contains two integers nn and qq ( 2n31052 \le n \le 3\cdot10^5 , 1q31051 \le q \le 3\cdot10^5 ), the length of the string, and the number of queries.

The second line contains the string ss , consisting of nn characters "(" and ")".

Each of the following qq lines contains three integers tt , ll and rr ( t{1,2}t \in \{1, 2\} , 1l<rn1 \le l < r \le n ), the queries you need to answer. It is guaranteed that all the queries are valid and correspond to the problem statements.

输出格式

For each query, print a single integer in a separate line, the number of substrings that are simple RBS. The answers must be printed in the same order as the queries are specified in the input.

输入输出样例

  • 输入#1

    9 8
    )(()())()
    2 3 6
    2 2 7
    1 3 4
    2 2 7
    2 2 9
    1 5 6
    1 2 7
    2 8 9

    输出#1

    3
    4
    2
    4
    1

说明/提示

Consider the example test case.

The answer to the first query is 33 , as there are three suitable substrings: s[36]s[3\dots6] , s[34]s[3\dots4] and s[56]s[5\dots6] .

The answer to the second query is 44 . The substrings are s[36]s[3\dots6] , s[34]s[3\dots4] , s[56]s[5\dots6] and s[27]s[2\dots7] .

After the third query, the string becomes ")(..())()".

The answer to the fourth query is 22 . The substrings are s[56]s[5\dots6] and s[27]s[2\dots7] . Note that s[36]s[3\dots6] is not a simple RBS anymore, as it starts with ".".

The answer to the fifth query is 44 . The substrings are s[56]s[5\dots6] , s[27]s[2\dots7] , s[89]s[8\dots9] and s[29]s[2\dots9] .

After the sixth query, the string becomes ")(....)()".

After the seventh query, the string becomes ")......()".

The answer to the eighth query is 11 . The substring is s[89]s[8\dots9] .

首页