Advertisement
Derga

Untitled

Oct 6th, 2023
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.63 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3.  
  4. using namespace std;
  5.  
  6. //solution for similar problem
  7. vector<int> Solution1(const vector<int>& numbers) {
  8. vector<int> result;
  9. result.push_back(numbers.front());
  10. bool is_increasing = (numbers[0] < numbers[1]);
  11.  
  12. for (auto number : numbers) {
  13. if (is_increasing) {
  14. if (number > result.back()) {
  15. result.push_back(number);
  16. is_increasing = false;
  17. }
  18. else {
  19. result.back() = number;
  20. }
  21. continue;
  22. }
  23.  
  24. if (!is_increasing) {
  25. if (number < result.back()) {
  26. result.push_back(number);
  27. is_increasing = true;
  28. }
  29. else {
  30. result.back() = number;
  31. }
  32. }
  33. }
  34.  
  35. return result;
  36. }
  37.  
  38. /*
  39. test4
  40. 9
  41. 8 9 6 4 5 7 3 2 4
  42.  
  43. 8 9 4 5 3 4
  44. */
  45. vector<int> Solution2(const vector<int>& numbers) {
  46. vector<int> result;
  47. result.push_back(numbers.front());
  48. bool is_increasing = (numbers[0] < numbers[1]);
  49.  
  50. int left = 0;
  51. int right = 0;
  52. while (right + 1 < numbers.size()) {
  53. if (is_increasing && numbers[right + 1] >= numbers[right]) {
  54. ++right;
  55. continue;
  56. }
  57. if (!is_increasing && numbers[right + 1] <= numbers[right]) {
  58. ++right;
  59. continue;
  60. }
  61.  
  62. int tmp = right;
  63. if (is_increasing) {
  64. while (tmp - 1 >= left && numbers[right + 1] < numbers[tmp - 1]) {
  65. --tmp;
  66. continue;
  67. }
  68. } else {
  69. while (tmp >= left && numbers[right + 1] > numbers[tmp - 1]) {
  70. --tmp;
  71. continue;
  72. }
  73. }
  74.  
  75. result.push_back(numbers[tmp]);
  76. left = right;
  77. is_increasing = !is_increasing;
  78. }
  79. result.push_back(numbers[left + 1]);
  80.  
  81. return result;
  82. }
  83.  
  84. int main() {
  85. int numbers_count;
  86. cin >> numbers_count;
  87.  
  88. if (numbers_count == 0) {
  89. return 0;
  90. }
  91.  
  92. if (numbers_count == 1) {
  93. int number;
  94. cin >> number;
  95. cout << number;
  96. return 0;
  97. }
  98.  
  99. vector<int> numbers(numbers_count);
  100. for (auto& number : numbers) {
  101. cin >> number;
  102. }
  103.  
  104. //for (auto number : Solution1(numbers)) {
  105. for (auto number : Solution2(numbers)) {
  106. cout << number << ' ';
  107. }
  108.  
  109. return 0;
  110. }
  111. /*
  112. test1
  113. 10
  114. 1 4 2 3 5 8 6 7 9 10
  115.  
  116. 1 4 2 8 6 7
  117.  
  118. test2
  119. 5
  120. 1 2 3 4 5
  121.  
  122. 1 2
  123.  
  124. test3
  125. 1
  126. 100
  127.  
  128. 100
  129.  
  130. test4
  131. 9
  132. 8 9 6 4 5 7 3 2 4
  133.  
  134. 8 9 4 5 3 4
  135. */
  136.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement