Advertisement
Guest User

Ovo

a guest
Jun 18th, 2019
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.22 KB | None | 0 0
  1. include <bits/stdc++.h>
  2. 02
  3. #include "vektor.h"
  4. 03
  5. using namespace std;
  6. 04
  7.  
  8. 05
  9. Vektor::Vektor() {
  10. 06
  11. this->v.clear();
  12. 07
  13. }
  14. 08
  15.  
  16. 09
  17. void operator | (Vektor &a, const int &x) {
  18. 10
  19. a.v.push_back(x);
  20. 11
  21. }
  22. 12
  23.  
  24. 13
  25. void operator | (const int &x, Vektor &a) {
  26. 14
  27. a.v.insert(a.v.begin(), x);
  28. 15
  29. }
  30. 16
  31.  
  32. 17
  33. ostream& operator << (ostream &f, const Vektor &a) {
  34. 18
  35. f << "(";
  36. 19
  37. if (!a.v.empty()) f << a.v[0];
  38. 20
  39. for (int i = 1; i < (int)a.v.size(); i++) f << "," << a.v[i];
  40. 21
  41. f << ")";
  42. 22
  43. return f;
  44. 23
  45. }
  46. 24
  47.  
  48. 25
  49.  
  50. 26
  51. void Vektor::operator -- () {
  52. 27
  53. if (!this->v.empty()) this->v.erase(this->v.begin());
  54. 28
  55. }
  56. 29
  57.  
  58. 30
  59. void Vektor::operator -- (int) {
  60. 31
  61. if (!this->v.empty()) this->v.pop_back();
  62. 32
  63. }
  64. 33
  65.  
  66. 34
  67. Vektor::operator double() const {
  68. 35
  69. int sum = 0;
  70. 36
  71. for (auto &x : this->v) sum += x;
  72. 37
  73. if (!this->v.empty()) return (double)sum/this->v.size();
  74. 38
  75. return 0;
  76. 39
  77. }
  78. 40
  79.  
  80. 41
  81. int Vektor::operator + () const {
  82. 42
  83. int maks = 0;
  84. 43
  85. for (auto &x : this->v) maks = max(max(x, -x), maks);
  86. 44
  87. return maks;
  88. 45
  89. }
  90. 46
  91.  
  92. 47
  93. int Vektor::operator - () const {
  94. 48
  95. int mini = 1e9;
  96. 49
  97. for (auto &x : this->v) mini = min(max(x, -x), mini);
  98. 50
  99. if (mini == 1e9) mini = 0;
  100. 51
  101. return mini;
  102. 52
  103. }
  104. 53
  105.  
  106. 54
  107. Vektor Vektor::operator & (const Vektor &a) const {
  108. 55
  109. Vektor ret = *this;
  110. 56
  111. for (auto &x : a.v) ret | x;
  112. 57
  113. return ret;
  114. 58
  115. }
  116. 59
  117.  
  118. 60
  119. int Vektor::operator * (const Vektor &a) const {
  120. 61
  121. if (this->v.size() != a.v.size()) return 0;
  122. 62
  123. int ret = 0;
  124. 63
  125. for (int i = 0; i < (int)a.v.size(); i++) ret += a.v[i] * this->v[i];
  126. 64
  127. return ret;
  128. 65
  129. }
  130. 66
  131.  
  132. 67
  133. int& Vektor::operator [] (int x) {
  134. 68
  135. if (x < 0) x += this->v.size();
  136. 69
  137. return this->v[x];
  138. 70
  139. }
  140. 71
  141.  
  142. 72
  143. Vektor Vektor::operator % (int x) const {
  144. 73
  145. Vektor ret;
  146. 74
  147. int l = 0;
  148. 75
  149. int tmp = 0;
  150. 76
  151. for (int r = 0; r < this->v.size(); r++) {
  152. 77
  153. tmp += max(this->v[r], -this->v[r]);
  154. 78
  155. while (tmp > x && l <= r) {
  156. 79
  157. tmp -= max(this->v[l++], -this->v[r]);
  158. 80
  159. }
  160. 81
  161. if (tmp == x) {
  162. 82
  163. for (int i = l; i <= r; i++) ret | this->v[i];
  164. 83
  165. break;
  166. 84
  167. }
  168. 85
  169. }
  170. 86
  171. return ret;
  172. 87
  173. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement