#include <bits/stdc++.h>
#define int long long
using namespace std;
const long long N = 2e5 + 5;
int a[N];
const int inf = 1e18;
int dp[N][2][2]; // min operations, i = index, j= a[i] == -1 or else , k= operation pending , till i a is sorted;
void solve()
{
int n;
cin >> n;
for (int i = 0; i < n; i++)
{
dp[i][0][0] = inf;
dp[i][0][1] = inf;
dp[i][1][0] = inf;
dp[i][1][1] = inf;
cin >> a[i];
}
if (n == 1)
{
cout << 0;
return;
}
if (n == 2)
{
if (is_sorted(a, a + n))
{
cout << 0;
return;
}
else
{
cout << -1;
return;
}
}
if (a[0] == -1)
{
dp[0][0][0] = 0;
dp[0][1][1] = 1;
}
else if (a[0] == 1)
{
dp[0][0][1] = 1;
dp[0][1][0] = 0;
}
for (int i = 1; i < n; i++)
{
// cout << a[i] << endl;
if (a[i] == 1)
{
// changing it
dp[i][0][1] = min(dp[i][0][1], dp[i - 1][0][0] + 1);
dp[i][0][0] = min(dp[i][0][0], dp[i - 1][0][1]);
// not changing it
dp[i][1][0] = min(dp[i][1][0], dp[i - 1][0][0]);
dp[i][1][0] = min(dp[i][1][0], dp[i - 1][1][0]);
}
else if (a[i] == -1)
{
// 1 -> changing it without cost
dp[i][1][0] = min(dp[i][1][0], dp[i - 1][0][1]);
dp[i][1][0] = min(dp[i][1][0], dp[i - 1][1][1]);
// 1 -> changing it with cost
dp[i][1][1] = min(dp[i][1][1], dp[i - 1][0][0] + 1);
dp[i][1][1] = min(dp[i][1][1], dp[i - 1][1][0] + 1);
// 2 -> not changing it
dp[i][0][0] = min(dp[i][0][1], dp[i - 1][0][0]);
}
// cout << min(dp[i][1][0], dp[i][0][0]) << ' ';
}
// for (int i = 0; i < n; i++)
// {
// cout << dp[i][0][0] << ' ' << dp[i][0][1] << ' ' << dp[i][1][0] << ' ' << dp[i][1][1] << ' ' << endl;
// }
int ans = min(dp[n - 1][1][0], dp[n - 1][0][0]);
if (ans == inf)
{
cout << -1;
}
else
cout << ans << endl;
}
signed main()
{
ios_base::sync_with_stdio(0);
cin.tie(NULL);
cout.tie(NULL);
int t = 1;
// cin >> t;
for (int i = 1; i <= t; i++)
{
// cout << "Case #" << i << ':' << ' ';
solve();
cout << endl;
}
return 0;
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |