Advertisement
Guest User

Untitled

a guest
Feb 21st, 2020
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.75 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4. struct Panstwo
  5. {
  6. int nr;
  7. unsigned wspolczynnik;
  8. };
  9.  
  10. int main()
  11. {
  12. ios_base::sync_with_stdio(false);
  13. unsigned n;cin>>n;
  14. unsigned ile=0;
  15. Panstwo* tab=new Panstwo[n];
  16. unsigned k;
  17. unsigned int max=0;
  18. int pom,pom2;
  19. int indexy[1001];//przechowuje indeksy elementow /*zalozenie n<=1000*/
  20. for(unsigned i=0;i<n;++i)
  21. {
  22. cin>>tab[i].nr;
  23. cin>>tab[i].wspolczynnik;
  24. indexy[tab[i].nr]=i;//zeby latwiej bylo szukac to przypisane indeksy
  25. }
  26.  
  27. unsigned m;cin>>m;
  28. for(unsigned j=0;j<m;++j)
  29. {
  30. unsigned p,w;
  31. cin>>p>>w;
  32. int i=indexy[p/*i*/];//index szukanego elementu
  33. tab[i].wspolczynnik=w;//zmiana wartosci
  34.  
  35.  
  36.  
  37.  
  38.  
  39. /*PRZESIEW*/ /*fatherV*/
  40. if((i>0)&&(w>tab[k=(i-1)/2].wspolczynnik))
  41. {
  42. /*przesiew w gore*/
  43.  
  44. while((i>0)&&(w>tab[k].wspolczynnik))
  45. {
  46. swap(indexy[tab[k].nr],indexy[tab[i].nr]);
  47. swap(tab[i],tab[k]);//?
  48. ++ile;
  49. i=k;
  50. --k;
  51. k/=2;
  52. }
  53. } /*V l-son*/ /*p- son*/
  54. else /*CHECKPOINT*/
  55. {//zmienic indeks szukanego
  56. k=(i*2)+1;
  57.  
  58. if(((k<n)&&(w<tab[k].wspolczynnik)) || ((k+1<n)&&(w<tab[k+1].wspolczynnik)))
  59. {
  60. // int k=i*2;--k;int k+1=k+1;
  61. while(((k<n) && (w<tab[k].wspolczynnik)) || ((k+1<n) && (w<tab[k+1].wspolczynnik)))
  62. {
  63. if((k+1<n)&&(tab[k+1].wspolczynnik>tab[k].wspolczynnik))//!!
  64. {
  65. max=k+1;
  66. // swap(indexy[i],indexy[k+1]);
  67. // swap(indexy[tab[i].nr],indexy[tab[k+1].nr]);
  68. // ++ile;
  69. // i=k+1;
  70. // k+1*=2;
  71. // ++k+1;
  72.  
  73.  
  74. }
  75. else
  76. {
  77. max=k;
  78. // swap(indexy[i],indexy[k]);
  79. // swap(indexy[tab[i].nr],indexy[tab[k].nr]);
  80. // ++ile;
  81. // i=k;
  82. // k*=2;
  83. // ++k;/*ZMIENIAC TEZ k+1A?*/
  84. }
  85. pom=tab[max].nr;
  86. pom2=tab[i].nr;
  87. swap(indexy[pom2],indexy[pom]);//!!!!!!!
  88. swap(tab[i],tab[max]);
  89. ++ile;
  90. i=max;
  91. k=2*i+1;
  92.  
  93. }
  94. }
  95. //else break;
  96.  
  97. }
  98. }
  99. cout<<ile;
  100.  
  101. delete [] tab;
  102. return 0;
  103. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement