根据P序列可以恢复出括号序列,然后就可以计算W序列了。
#include<iostream>
using namespace std;
int main()
{
int t;
cin>>t;
for (int ii=0; ii<t; ii++)
{
int n, sum = 0, p = 0;
char parenthese[100] = {0};
cin>>n;
for (int i=0; i<n; i++)
{
int buf;
cin>>buf;
for (int j=sum; j<buf; j++)
parenthese[p++] = '(';
parenthese[p++] = ')';
sum = buf;
}
bool match[100] = {false};
for (int i=0; i<n; i++)
{
int j;
for (j=0; j<p; j++)
if (parenthese[j] == ')' && !match[j])
break;
match[j] = true;
int number = 0;
for (int k=j-1; k>=0; k--)
{
if (parenthese[k] == '(')
number++;
if (parenthese[k] == '(' && !match[k])
{
match[k] = true;
break;
}
}
if (i < n-1)
cout<<number<<' ';
else
cout<<number<<endl;
}
}
}