Advertisement
Guest User

Untitled

a guest
Feb 19th, 2020
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.89 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4. struct Panstwo
  5. {
  6. int nr,wspolczynnik;
  7. };
  8. //void display(Panstwo* tab,int n)
  9. //{
  10. // for(int i=0;i<n;++i)
  11. // {
  12. // cout<<tab[i].nr<<" "<<tab[i].wspolczynnik<<endl;
  13. // }cout<<endl;
  14. //}
  15. int sortujgalaz_w_gore(int*& indexy,Panstwo*& tab,int indextablicy,int wszystkich_elementow)//warstw = getlayer
  16. {
  17. int ile=0; int ojciec=indexy[indextablicy];/*potrzebne tak?*/
  18. for(;indextablicy>=0&&ojciec>0;--indextablicy,indextablicy/=2)
  19. {
  20. ojciec--;
  21. ojciec/=2;
  22. if(tab[indextablicy].wspolczynnik>tab[ojciec].wspolczynnik)//a jak sa rowne to nic nie zamieniaj
  23. {
  24. swap(tab[indextablicy],tab[ojciec]);
  25. swap(indexy[indextablicy],indexy[ojciec]);
  26. ++ile;
  27. }
  28. // else
  29. // {//prawy wiekszy wspolczynnik i wiekszy index
  30. // if(indexy[indextablicy+1]<=/*<*/wszystkich_elementow)//istnieje prawy brat!
  31. // {
  32. // if(tab[indextablicy].wspolczynnik>/*<=*/tab[indextablicy+1].wspolczynnik)
  33. // {
  34. // swap(tab[indextablicy],tab[indextablicy+1]);
  35. // swap(indexy[indextablicy],indexy[indextablicy]);
  36. // ++ile;
  37. // }
  38. // else if(tab[indextablicy].wspolczynnik==tab[indextablicy+1].wspolczynnik)
  39. // {
  40. // if(tab[indextablicy].nr>tab[indextablicy+1].nr)
  41. // {
  42. // swap(tab[indextablicy],tab[indextablicy+1]);
  43. // swap(indexy[indextablicy],indexy[indextablicy]);
  44. // ++ile;
  45. // }
  46. // }
  47.  
  48. // }
  49. // break;
  50. // }
  51. }
  52. return ile;
  53. }
  54. int sortujgalaz_w_dol(int*& indexy,Panstwo*& tab,int indextablicy,int wszystkich_elementow)
  55. {
  56. // Gdy przesiewamy w dół zamieniamy miejsce ojca
  57. // z tym synem który ma większą wartość,
  58. // jeżeli synowie są równi to zamieniamy z lewym synem
  59.  
  60. int ile=0;
  61. for(;indexy[indextablicy]<wszystkich_elementow;indextablicy*=2,++indextablicy)
  62. {
  63. int lsyn=indextablicy*=2;++lsyn;//SPRAWDZAC CZY TO NIE WYJDZIE POZA ZAKRES!?
  64. int psyn=lsyn+1;
  65. if(tab[indextablicy].wspolczynnik<tab[lsyn].wspolczynnik||tab[indextablicy].wspolczynnik<tab[psyn].wspolczynnik)
  66. {
  67. if(tab[lsyn].wspolczynnik>=/**/tab[psyn].wspolczynnik)
  68. {
  69. swap(tab[indextablicy],tab[lsyn]);
  70. swap(indexy[indextablicy],indexy[lsyn]);
  71. ++ile;
  72. }
  73. else
  74. {
  75. swap(tab[indextablicy],tab[psyn]);
  76. swap(indexy[indextablicy],indexy[psyn]);
  77. ++ile;
  78. }
  79. }
  80. else
  81. {
  82. break;
  83. }
  84. }
  85. return ile;
  86. }
  87. int main()
  88. {
  89. ios_base::sync_with_stdio(false);
  90. int n;cin>>n;
  91. int ile=0,i;
  92. Panstwo* tab=new Panstwo[n];
  93. int* indexy=new int[1001];//przechowuje indeksy elementow /*zalozenie n<=1000*/
  94. for(i=0;i<n;++i)
  95. {
  96. cin>>tab[i].nr;
  97. cin>>tab[i].wspolczynnik;
  98. indexy[tab[i].nr]=i;//zeby latwiej bylo szukac to przypisane indeksy
  99. }
  100.  
  101. int m;cin>>m;
  102. for(int j=0;j<m;++j)
  103. {
  104. int p,w;
  105. cin>>p>>w;
  106. int szukany=indexy[p/*i*/];//index szukanego elementu
  107. tab[szukany].wspolczynnik=w;//zmiana wartosci
  108. if(w>tab[(szukany-1)/2].wspolczynnik)
  109. {
  110. /*przesiewaj w gore*/
  111. ile+=sortujgalaz_w_gore(indexy,tab,p,n);
  112. }
  113. else if(w<tab[(szukany*2)+1].wspolczynnik||w<tab[(szukany*2)+2].wspolczynnik)
  114. {
  115. ile+=sortujgalaz_w_dol(indexy,tab,p,n);
  116. /*przesiewaj w dol*/
  117. }//nie sprawdzam czy mniejsze od prawego lub mniejsze od prawego
  118.  
  119. }
  120. cout<<ile;
  121.  
  122. delete [] tab;
  123. delete [] indexy;
  124. return 0;
  125. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement