这题的意思是有编号1~N的牛,给出每个(除了第一个)牛前面比它号小的牛的个数,输出牛是怎么排的队。没想出怎么用线段树做,就当模拟题做了。

 1 #include <stdio.h>
 2 #include <string.h>
 3 int a[8500],ans[8500];
 4 bool vis[8500];
 5 int main()
 6 {
 7     int n,i,j,cnt;
 8     while(~scanf("%d",&n))
 9     {
10         memset(vis,0,sizeof(bool)*n);
11         for(i = 1; i < n; i++)
12             scanf("%d",&a[i]);
13         for(i = n-1; i > 0; i--)
14         {
15             for(j = 0, cnt = -1; cnt < a[i]; j++)
16                 if(!vis[j]) cnt++;
17             ans[i] = j;
18             vis[j-1] = 1;
19         }
20         for(j = 0; j < n; j++)
21             if(!vis[j])
22                 ans[0] = j+1;
23         for(i = 0; i < n; i++)
24             printf("%d\n",ans[i]);
25     }
26     return 0;
27 }