Guest User

Untitled

a guest
Jul 12th, 2018
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.97 KB | None | 0 0
  1. #include<iostream>
  2. #include<string>
  3. using namespace std;
  4.  
  5. typedef struct Aktor{
  6. int raz,dwa;
  7. string pierwszy,drugi;
  8. struct Aktor *next,*prev;
  9. } A;
  10.  
  11. class Las{
  12. int ile;
  13. public:
  14. Las(){
  15. glowa=ogon=NULL;
  16. ile=0;
  17. }
  18. ~Las(){}
  19. void dodaj(string x,string y,int a,int b){
  20. A * nowy=new Aktor;
  21. nowy->raz=a;
  22. nowy->dwa=b;
  23. nowy->pierwszy=x;
  24. nowy->drugi=y;
  25. nowy->next=NULL;
  26. if(!ile){
  27. ile++;
  28. nowy->prev=NULL;
  29. glowa=ogon=nowy;
  30. }
  31. else{
  32. ile++;
  33. ogon->next=nowy;
  34. nowy->prev=ogon;
  35. ogon=nowy;
  36. }
  37. }
  38. void przejdz(int k){
  39. A * n=glowa;
  40. int i=0;
  41. while(n){
  42. if(i==k){cout<<n->pierwszy<<endl<<n->drugi<<endl<<n->raz<<endl<<n->dwa<<endl;}
  43. i++;
  44. n=n->next;
  45.  
  46. }
  47. }
  48.  
  49.  
  50. A * mid(int p,int k,A *x){
  51. A *n=x;
  52. int i=p;
  53. //x(p)
  54.  
  55. while(n){
  56. if (i==k){
  57. break;
  58. }
  59. n=n->next;
  60. i++;
  61. }
  62. return n;
  63.  
  64. }
  65.  
  66. A * getogon(){return ogon;}
  67. A * getglowa(){return glowa;}
  68. void setogon(A * o){ogon=o;}
  69. void setglowa(A*g){glowa=g;}
  70. int getile(){return ile;}
  71. private:
  72. A * glowa,*ogon;
  73. };
  74. int jeden,drugi;
  75. string raz,dwa;
  76. void swap(A *x,A* y){
  77. raz=x->pierwszy,dwa=x->drugi;
  78. jeden=x->raz,drugi=x->dwa;
  79. x->raz=y->raz;
  80. x->dwa=y->dwa;
  81. x->pierwszy=y->pierwszy;
  82. x->drugi=y->drugi;
  83.  
  84. y->raz=jeden;
  85. y->dwa=drugi;
  86. y->pierwszy=raz;
  87. y->drugi=dwa;
  88.  
  89.  
  90. }
  91.  
  92. void quick(Las las,A *left,A*right){
  93. if (left!=right){
  94. A * m=left;
  95. A *i;
  96. i=left->next;
  97. while(i&&i!=right->next){
  98. if(i->pierwszy<left->pierwszy){
  99. m=m->next;
  100. swap(m,i);
  101.  
  102. }
  103. i=i->next;
  104. }
  105. if(left&&m&&left!=m) swap(left,m);
  106.  
  107. if(left&&m->prev&&left!=m)quick(las,left,m->prev);
  108. if(m->next&&right&&m!=right)quick(las,m->next,right);
  109.  
  110. }
  111.  
  112.  
  113. }
  114. Las scal(Las raz,Las dwa){
  115. Las *pomocniczy=new Las();
  116. A *i=raz.getglowa(),*j=dwa.getglowa();
  117. while(i!=NULL||j!=NULL){
  118.  
  119. if((j!=NULL&i!=NULL&i->drugi<=j->drugi)|(j==NULL&i!=NULL)) {pomocniczy->dodaj(i->pierwszy,i->drugi,i->raz,i->dwa); i=i->next;}
  120. else if((j!=NULL&i!=NULL&i->drugi>j->drugi)|(i==NULL&j!=NULL)){pomocniczy->dodaj(j->pierwszy,j->drugi,j->raz,j->dwa); j=j->next;}
  121.  
  122. }
  123. return *pomocniczy;
  124. }
  125.  
  126.  
  127. Las merge(Las &las,A * left,A * right,int p,int k){
  128. Las tm;
  129. if(left==right) {Las ble;ble.dodaj(left->pierwszy,left->drugi,left->raz,left->dwa);return ble;}
  130. if (left!=right){
  131.  
  132. int ble=(p+k)/2;
  133. A* m=las.mid(p,ble,left);
  134. Las tm1,tm2;
  135. tm1=merge(las,left,m,p,ble);
  136. tm2=merge(las,m->next,right,ble+1,k);
  137. tm=scal(tm1,tm2);
  138.  
  139. }
  140. return tm;
  141. }
  142.  
  143.  
  144.  
  145.  
  146. int main(){
  147. int n,k;
  148. int tmpile;
  149.  
  150. Las cos;
  151. string pusty,pierwsze,drugie;
  152. int wybor,raz,dwa;
  153. cin>>n;
  154. while(n){
  155. cin>>wybor;
  156. switch(wybor){
  157. case 1:{
  158. getline(cin,pusty);
  159. getline(cin,pierwsze);
  160. getline(cin,drugie);
  161. cin>>raz>>dwa;
  162. cos.dodaj(pierwsze,drugie,raz,dwa);
  163. break;}
  164. case 2:{
  165. quick(cos,cos.getglowa(),cos.getogon());
  166. break;}
  167. case 3:{
  168.  
  169. tmpile=cos.getile()-1;
  170. cos=merge(cos,cos.getglowa(),cos.getogon(),0,tmpile);
  171. break;}
  172. case 4:{
  173. cin>>k;
  174. cos.przejdz(k);
  175.  
  176. break;}
  177. default: break;
  178.  
  179. }
  180. n--;}
  181. return 0;}
Add Comment
Please, Sign In to add comment