#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(); } |
English