fork download
  1. #include<stdio.h>
  2. #include<algorithm>
  3. using namespace std;
  4. int segtree[65536];
  5. void add(int a,int b){
  6. a+=32768;
  7. while(a){
  8. segtree[a]+=b;
  9. a/=2;
  10. }
  11. }
  12. int find(int a){
  13. int left=0;
  14. int right=32768;
  15. int at=1;
  16. while(left+1<right){
  17. int M=(left+right)/2;
  18. if(segtree[at*2+1]<a){
  19. right=M;
  20. a-=segtree[at*2+1];
  21. at=at*2;
  22. }else{
  23. left=M;
  24. at=at*2+1;
  25. }
  26. }
  27. return right;
  28. }
  29. int d[40000];
  30. int e[40000];
  31. int main(){
  32. int a;
  33. scanf("%d",&a);
  34. for(int i=0;i<a;i++)scanf("%d",d+i);
  35. for(int i=0;i<a;i++){
  36. add(i,1);
  37. }
  38. for(int i=a-1;i>=0;i--){
  39. if(i<d[i]){
  40. printf("NIE\n");
  41. return 0;
  42. }
  43. e[i]=find(d[i]+1);
  44. add(e[i]-1,-1);
  45. }
  46. for(int i=0;i<a;i++)printf("%d\n",e[i]);
  47. }
Success #stdin #stdout 0s 3908KB
stdin
Standard input is empty
stdout
Standard output is empty