Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- using namespace std;
- //solution for similar problem
- vector<int> Solution1(const vector<int>& numbers) {
- vector<int> result;
- result.push_back(numbers.front());
- bool is_increasing = (numbers[0] < numbers[1]);
- for (auto number : numbers) {
- if (is_increasing) {
- if (number > result.back()) {
- result.push_back(number);
- is_increasing = false;
- }
- else {
- result.back() = number;
- }
- continue;
- }
- if (!is_increasing) {
- if (number < result.back()) {
- result.push_back(number);
- is_increasing = true;
- }
- else {
- result.back() = number;
- }
- }
- }
- return result;
- }
- /*
- test4
- 9
- 8 9 6 4 5 7 3 2 4
- 8 9 4 5 3 4
- */
- vector<int> Solution2(const vector<int>& numbers) {
- vector<int> result;
- result.push_back(numbers.front());
- bool is_increasing = (numbers[0] < numbers[1]);
- int left = 0;
- int right = 0;
- while (right + 1 < numbers.size()) {
- if (is_increasing && numbers[right + 1] >= numbers[right]) {
- ++right;
- continue;
- }
- if (!is_increasing && numbers[right + 1] <= numbers[right]) {
- ++right;
- continue;
- }
- int tmp = right;
- if (is_increasing) {
- while (tmp - 1 >= left && numbers[right + 1] < numbers[tmp - 1]) {
- --tmp;
- continue;
- }
- } else {
- while (tmp >= left && numbers[right + 1] > numbers[tmp - 1]) {
- --tmp;
- continue;
- }
- }
- result.push_back(numbers[tmp]);
- left = right;
- is_increasing = !is_increasing;
- }
- result.push_back(numbers[left + 1]);
- return result;
- }
- int main() {
- int numbers_count;
- cin >> numbers_count;
- if (numbers_count == 0) {
- return 0;
- }
- if (numbers_count == 1) {
- int number;
- cin >> number;
- cout << number;
- return 0;
- }
- vector<int> numbers(numbers_count);
- for (auto& number : numbers) {
- cin >> number;
- }
- //for (auto number : Solution1(numbers)) {
- for (auto number : Solution2(numbers)) {
- cout << number << ' ';
- }
- return 0;
- }
- /*
- test1
- 10
- 1 4 2 3 5 8 6 7 9 10
- 1 4 2 8 6 7
- test2
- 5
- 1 2 3 4 5
- 1 2
- test3
- 1
- 100
- 100
- test4
- 9
- 8 9 6 4 5 7 3 2 4
- 8 9 4 5 3 4
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement