U652246 [YCU Cup] 威汉森的石山代码

题目背景

**Aerhuo** 最近在组织大家进行寒假集训,要求每人每天刷 5 道题。 然而,大一的 **威汉森**(绿名)却总是摸鱼。他声称自己 2 小时写出的代码是“经过深思熟虑的架构设计”,但 **烤小鱼**(队长)看了一眼后惊呼:“这简直就是石山代码!全是嵌套的 `if` 和递归!” 威汉森不服气,还要拉着 **HM** 进行 PK。为了防止威汉森那层层嵌套的递归函数导致评测机爆栈,Aerhuo 决定先写一个程序,检测一下威汉森代码的**最大递归深度**。

题目描述

我们将威汉森代码中的一次函数递归调用记作一个左括号 `(`,函数返回记作一个右括号 `)`。 给出一个字符串 $S$,表示威汉森代码的调用执行序列。题目保证 $S$ 是一个**合法的括号序列**(即每一次调用都有对应的返回,且结构正确)。 请你计算这段代码在运行过程中,**调用栈的最大深度**是多少? **本题包含多组测试数据。**

输入格式

第一行包含一个整数 $T$ ($1 \le T \le 100$),表示测试数据的组数。 接下来对于每组测试数据: - 第一行包含一个整数 $n$,表示字符串 $S$ 的长度。 - 第二行包含一个字符串 $S$,保证只包含 `(` 和 `)`,且合法。

输出格式

对于每组测试数据,输出一行一个整数,表示该组数据的最大递归深度。

说明/提示

**威汉森**:“你看,我这代码虽然缩进有点多,但逻辑是完美的!” **烤小鱼**:“你这缩进都快跑到屏幕外面去了……” ## 数据范围 对于 $100\%$ 的数据, $1 \le T \le 100$, $2 \le n \le 10^5$,且单测试点数据的 $n$ 之和 $\sum n \le 2 \cdot 10^5$。 保证 $S$ 是合法的括号序列。