#include <iostream> #include <algorithm> using namespace std; int const N = 5e4 + 9, INF = 1e9 + 9; int n; int tab[N]; int dp[2][N]; int zrob(bool w) { bool pw = false; dp[0][0] = 0; dp[1][0] = 1; for (int i = 1; i < n; i++) { //jezeli nie zmieniamy tab[i] dp[0][i] = dp[1][i - 1]; //ze zmianie poprzednieniego na 100% sie da, pytanie czy da sie nie przy zmianie bool a; if (w == false) a = (tab[i - 1] > tab[i]); else a = (tab[i - 1] < tab[i]); if (a ^ pw) dp[0][i] = min(dp[0][i], dp[0][i - 1]); //jezeli zmieniamy tab[i] na +- 10^9 dp[1][i] = dp[0][i - 1] + 1; //niezaleznie od wartosci poprzedniego niezmienionego zmieniamy na wartosc wieksza/mniejsza wiec sie na pewno da pw = !pw; } return min(dp[1][n - 1], dp[0][n - 1]); } void solve() { cin >> n; for (int i = 0; i < n; i++) cin >> tab[i]; int ans = zrob(false); //pierwszy scenariusz czyli a b a b a b ans = min(ans, zrob(true)); //drugi scenariusz czyli b a b a b a cout << ans << "\n"; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); solve(); }
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 | #include <iostream> #include <algorithm> using namespace std; int const N = 5e4 + 9, INF = 1e9 + 9; int n; int tab[N]; int dp[2][N]; int zrob(bool w) { bool pw = false; dp[0][0] = 0; dp[1][0] = 1; for (int i = 1; i < n; i++) { //jezeli nie zmieniamy tab[i] dp[0][i] = dp[1][i - 1]; //ze zmianie poprzednieniego na 100% sie da, pytanie czy da sie nie przy zmianie bool a; if (w == false) a = (tab[i - 1] > tab[i]); else a = (tab[i - 1] < tab[i]); if (a ^ pw) dp[0][i] = min(dp[0][i], dp[0][i - 1]); //jezeli zmieniamy tab[i] na +- 10^9 dp[1][i] = dp[0][i - 1] + 1; //niezaleznie od wartosci poprzedniego niezmienionego zmieniamy na wartosc wieksza/mniejsza wiec sie na pewno da pw = !pw; } return min(dp[1][n - 1], dp[0][n - 1]); } void solve() { cin >> n; for (int i = 0; i < n; i++) cin >> tab[i]; int ans = zrob(false); //pierwszy scenariusz czyli a b a b a b ans = min(ans, zrob(true)); //drugi scenariusz czyli b a b a b a cout << ans << "\n"; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); solve(); } |