这题的意思是有编号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 }