fork download
  1. #include<stdio.h>
  2. void swab(int *arr, int a, int b){
  3. int temp;
  4. temp=arr[a];
  5. arr[a]=arr[b];
  6. arr[b]=temp;
  7. }
  8. void downheap(int *arr, int root, int lastc){
  9. int parent, lc, rc, lastp;
  10. parent=root;
  11. lastp=lastc/2;
  12. while(1){
  13. lc=parent*2;
  14. rc=parent*2+1;
  15. if(lc>lastc){
  16. break;
  17. }
  18. if(lc==lastc){
  19. if(arr[lc]<=arr[parent]){
  20. swab(arr, lc, parent);
  21. parent=lc;
  22. }else{
  23. break;
  24. }
  25. }else{
  26. if(arr[lc]<=arr[rc]&&arr[lc]<=arr[parent]){
  27. swab(arr, lc, parent);
  28. parent=lc;
  29. }else if(arr[rc]<=arr[lc]&&arr[rc]<=arr[parent]){
  30. swab(arr, rc, parent);
  31. parent=rc;
  32. }else{
  33. break;
  34. }
  35. }
  36. }
  37. }
  38.  
  39. int main(void){
  40. int cal, i, com, total=1;
  41. int input[100001];
  42. scanf("%d", &cal);
  43. for(i=0; i<cal; i++){
  44. scanf("%d", &com);
  45. if(com!=0){
  46. input[total]=com;
  47. total++;
  48. downheap(input, 1, total-1);
  49. }else if(total==1){
  50. printf("0\n");
  51. }else{
  52. printf("%d\n", input[total-1]);
  53. total--;
  54. }
  55. }
  56. return 0;
  57. }
Success #stdin #stdout 0s 4256KB
stdin
13
0
1
2
0
0
3
2
1
0
0
0
0
0
stdout
0
2
1
2
3
1
0
0