Advertisement
Guest User

Heap

a guest
Nov 26th, 2015
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.95 KB | None | 0 0
  1. #include <fstream>
  2.  
  3. using namespace std;
  4.  
  5. ifstream in("heapuri.in");
  6. ofstream out("heapuri.out");
  7.  
  8. long long n,x,operatie,p=1;
  9. long long heap[200005],pozitie[200005],ordine[400005];
  10.  
  11. void sift(long long heap[],long long &inaltime,long long k)
  12. {
  13. long long fiu,aux;
  14. do{
  15. fiu=0;
  16. if(2*k <= inaltime)
  17. {
  18. fiu=2*k;
  19. if(2*k+1 <= inaltime && heap[2*k+1]<heap[2*k]) fiu=2*k+1;
  20. if(heap[fiu] >= heap[k]) fiu=0;
  21. }
  22. if(fiu){
  23. pozitie[heap[fiu]]=k;
  24. pozitie[heap[k]]=fiu;
  25. aux=heap[k];
  26. heap[k]=heap[fiu];
  27. heap[fiu]=aux;
  28. }
  29. }while(fiu);
  30. return;
  31. }
  32.  
  33. void fa_heap(long long heap[],long long &inaltime,long long k)
  34. {
  35. long long cheie=heap[k];
  36.  
  37. while((k>1) && (cheie<heap[k/2]))
  38. {
  39. heap[k]=heap[k/2];
  40. pozitie[heap[k/2]]=k;
  41. k=k/2;
  42. }
  43. pozitie[cheie]=k;
  44. heap[k]=cheie;
  45. return;
  46. }
  47.  
  48. void inserare_heap(long long heap[],long long &inaltime,long long x)
  49. {
  50. inaltime++;
  51. heap[inaltime]=x;
  52. ordine[p]=x;
  53. p++;
  54. pozitie[x]=inaltime;
  55. fa_heap(heap,inaltime,inaltime);
  56. return;
  57. }
  58.  
  59. void stergere_heap(long long heap[],long long &inaltime,long long poz)
  60. {
  61. heap[poz]=heap[inaltime];
  62. inaltime--;
  63. if(poz>1 && heap[poz]<heap[poz/2]) fa_heap(heap,inaltime,poz);
  64. else sift(heap,inaltime,poz);
  65. return;
  66. }
  67.  
  68.  
  69. int main()
  70. {
  71. long long i,inaltime;
  72. in>>n;
  73. inaltime=0;
  74. for(i=1;i<=n;i++)
  75. {
  76. in>>operatie;
  77. if(operatie==1)
  78. {
  79. in>>x;
  80. inserare_heap(heap,inaltime,x);
  81. }
  82. if(operatie==2)
  83. {
  84. in>>x;
  85. if(inaltime>0) stergere_heap(heap,inaltime,pozitie[ordine[x]]);
  86. }
  87. if(operatie==3)
  88. {
  89. out<<heap[1]<<"\n";
  90. }
  91. }
  92. in.close();
  93. out.close();
  94. return 0;
  95. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement