//题意:P代表当前右括号位置前面有多少个左括号
//W代表右括号位置从与它匹配的位置到该位置有多少个右括号
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <queue>
using namespace std;
int n;
int P[25];
int W[25];
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
deque<int>que;
scanf("%d",&n);
for (int i=0;i<n;++i)scanf("%d",&P[i]);
int c = 1;
for(int i=0;i<n;++i)
{
if (i==0)
{
for (int j=0;j<P[i];++j)//前面的左括号数目
{
que.push_back(c++);
}
}
else
{
for (int j=0;j<P[i]-P[i-1];++j)//前面的左括号数目
{
que.push_back(c++);
}
}
//加入该右括号
//同时将一个左括号移出
int k = que.back();
que.pop_back();
W[i] = (c - k + 1)/2;
c++;
}
for (int i=0;i<n-1;++i)printf("%d ",W[i]);
printf("%d\n",W[n-1]);
}
return 0;
}
POJ1068双端队列模拟
最新推荐文章于 2020-12-07 10:56:31 发布