题意
传送门 POJ 1068
题解
根据左侧的右括号与左括号数量即可确定某个左括号/右括号的下标,那么用栈进行匹配即可,输出为某一对匹配括号内的匹配括号对数。
#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <stack>
using namespace std;
int main()
{
int t, n, p1, p2;
scanf("%d", &t);
while (t--)
{
scanf("%d", &n);
stack<int> sk;
p1 = 0;
for (int i = 0, l = 0, r; i < n; i++)
{
scanf("%d", &p2);
for (int j = 0; j < (p2 - p1); j++)
{
sk.push(l++);
}
r = i + p2, l++, p1 = p2;
printf("%d%c", (r - sk.top() + 1) / 2, i == n - 1 ? '\n' : ' ');
sk.pop();
}
}
}