1 大体思路是这样,由于括号必定是偶数,每一个P前面都有P个左括号
 2 W就是与左括号到与它匹配的右括号之间右括号的个数。
 3 可设立一个数组用W[21]于存放标记,初始化为0,从P处开始向前当有
 4 匹配的右括号时就记录下来W[i]=1,最后P-i+1就是所要求的值。
 5 
 6 #include <stdio.h>
 7 #include <string.h>
 8 
 9 int main()
10 { 
11     int i, n, ncases;
12     int w[21], k, p;
13      
14     scanf("%d", &ncases); 
15     while (ncases--)
16     {
17         memset(w,0,sizeof(w));//数组初始化为0
18         k = 1;  
19         scanf("%d", &n);
20         while (n--)
21         {
22                scanf("%d",&p);
23                 i = p;
24                while (w[i]==1)//从P处向前查找
25                 i--;
26                if(k==1)
27                {
28                  printf("%d",p-i+1);
29                  k = 0;
30                } 
31                else  
32                  printf(" %d",p-i+1);
33                w[i] = 1;  
34          }   
35          printf("\n");
36      }           
37      return 0;
38 }