Advertisement
Guest User

Untitled

a guest
Feb 18th, 2020
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.95 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=indextablicy;/*potrzebne tak?*/
  18. for(;indextablicy>0&&ojciec>0;--indextablicy,indextablicy/=2)
  19. {
  20. ojciec=indextablicy-1;
  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[indextablicy]);
  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. int ile=0;
  57. for(;indextablicy<wszystkich_elementow;indextablicy*=2,++indextablicy)
  58. {
  59. int lsyn=indextablicy*=2;++lsyn;//SPRAWDZAC CZY TO NIE WYJDZIE POZA ZAKRES!?
  60. if(tab[indextablicy].wspolczynnik<tab[lsyn].wspolczynnik)
  61. {
  62. swap(tab[indextablicy],tab[lsyn]);
  63. swap(indexy[indextablicy],indexy[lsyn]);
  64. ++ile;
  65.  
  66. }
  67. else
  68. {
  69. if(indexy[indextablicy+1]<wszystkich_elementow)//istnieje prawy brat!
  70. {
  71. if(tab[indextablicy].wspolczynnik>/*<=*/tab[indextablicy+1].wspolczynnik)
  72. {
  73. swap(tab[indextablicy],tab[indextablicy+1]);
  74. swap(indexy[indextablicy],indexy[indextablicy]);
  75. ++ile;
  76. }
  77. else if(tab[indextablicy].wspolczynnik==tab[indextablicy+1].wspolczynnik)
  78. {
  79. if(tab[indextablicy].nr>tab[indextablicy+1].nr)
  80. {
  81. swap(tab[indextablicy],tab[indextablicy+1]);
  82. swap(indexy[indextablicy],indexy[indextablicy]);
  83. ++ile;
  84. }
  85. }
  86.  
  87. }
  88. break;
  89. }
  90. }
  91. return ile;
  92. }//warstw = getlayer
  93. int main()
  94. {
  95. ios_base::sync_with_stdio(false);
  96. int n;cin>>n;
  97. int ile=0;
  98. Panstwo* tab=new Panstwo[n];
  99. int* indexy=new int[1001];//przechowuje indeksy elementow /*zalozenie n<=1000*/
  100. for(int i=0;i<n;++i)
  101. {
  102. cin>>tab[i].nr;
  103. cin>>tab[i].wspolczynnik;
  104. indexy[tab[i].nr]=i;//zeby latwiej bylo szukac to przypisane indeksy
  105. }
  106.  
  107. int m;cin>>m;
  108. for(int j=0;j<m;++j)
  109. {
  110. int p,w;
  111. cin>>p>>w;
  112. int szukany=indexy[p];//index szukanego elementu
  113. tab[szukany].wspolczynnik=w;//zmiana wartosci
  114. if(w>tab[(szukany-1)/2].wspolczynnik)
  115. {
  116. /*przesiewaj w gore*/
  117. ile+=sortujgalaz_w_gore(indexy,tab,w,n);
  118. }
  119. else if(w<tab[(szukany*2)+1].wspolczynnik)
  120. {
  121. ile+=sortujgalaz_w_dol(indexy,tab,w,n);
  122. /*przesiewaj w dol*/
  123. }
  124. }
  125. cout<<ile;
  126.  
  127. delete [] tab;
  128. delete [] indexy;
  129. return 0;
  130. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement