题目大意:有n头牛,给出从第二头牛开始每头牛前面有多少头牛编号比自己小。
求牛的编号。
分析:每次最后一头牛的编号为当前可用编号中排在第a[i]+1的数。
看了网上的题解是线段树,可是我不会线段树,就用简单的想法过了这个题目,学会线段树再更新。
代码:
#include<iostream>
using namespace std;
int a[8010],book[8010];
int main(){
int n,i,j,k;
cin >> n;
for(i = 2;i <= n;i++)
cin >> a[i];
for(i = n;i > 1;i--){
k = 0;
for(j = 1;k < a[i]+1;j++ )
if(book[j] == 0)
k++;
a[i] = j-1;
book[j-1] = 1;
}
for(i = 1;i <= n;i++){
if(book[i] == 0)
a[1] = i;
}
for(i = 1;i <= n;i++)
cout << a[i] << endl;
return 0;
}