#include <iostream> using namespace std; int main() { int last_min = 1; int last_max = 1; int last_val = 0; int last_up = 0; int last_down = 0; int steps; cin >> steps >> last_val; while(--steps) { int new_val; cin >> new_val; //cerr << last_val << " ? " << new_val << " min: " << last_min << " max: " << last_max << " down: " << last_down << " up: " << last_up << endl; int new_up, new_down, new_max, new_min; if (new_val > last_val) { new_up = min(last_min, last_down); new_down = last_max; new_max = min(last_down, last_min) + 1; new_min = min(last_up, last_max) + 1; } else if (new_val < last_val) { new_up = last_min; new_down = min(last_max, last_up); new_max = min(last_down, last_min) + 1; new_min = min(last_up, last_max) + 1; } else { new_up = last_min; new_down = last_max; new_max = min(last_down, last_min) + 1; new_min = min(last_up, last_max) + 1; } last_up = new_up; last_down = new_down; last_max = new_max; last_min = new_min; last_val = new_val; } cout << min(min(last_up, last_down), min(last_min, last_max)) << endl; return 0; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | #include <iostream> using namespace std; int main() { int last_min = 1; int last_max = 1; int last_val = 0; int last_up = 0; int last_down = 0; int steps; cin >> steps >> last_val; while(--steps) { int new_val; cin >> new_val; //cerr << last_val << " ? " << new_val << " min: " << last_min << " max: " << last_max << " down: " << last_down << " up: " << last_up << endl; int new_up, new_down, new_max, new_min; if (new_val > last_val) { new_up = min(last_min, last_down); new_down = last_max; new_max = min(last_down, last_min) + 1; new_min = min(last_up, last_max) + 1; } else if (new_val < last_val) { new_up = last_min; new_down = min(last_max, last_up); new_max = min(last_down, last_min) + 1; new_min = min(last_up, last_max) + 1; } else { new_up = last_min; new_down = last_max; new_max = min(last_down, last_min) + 1; new_min = min(last_up, last_max) + 1; } last_up = new_up; last_down = new_down; last_max = new_max; last_min = new_min; last_val = new_val; } cout << min(min(last_up, last_down), min(last_min, last_max)) << endl; return 0; } |