#include using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int N; string S; cin >> N >> S; long long ps = 0; // current prefix‐sum (1→+1, 0→–1, with flips applied on the fly) long long max_ps = 0; // max prefix‐sum over positions ≤ i–2 int flips = 0; // total flips performed priority_queue zeros; // max‐heap of indices of kept zeros for (int i = 0; i < N; i++) { long long prev = ps; // ps at position i–1 if (S[i] == '1') { ps = prev + 1; } else { // tentatively keep this zero zeros.push(i); ps = prev - 1; // for i>=1 we must have ps(i) >= max_ps, else flip zeros if (i >= 1) { while (ps < max_ps) { zeros.pop(); // flip the most‐recent kept zero flips++; ps += 2; // flipping gives +2 to all suffix sums } } } // update max_ps = max over ps[0..i-2] if (i >= 1) { max_ps = max(max_ps, prev); } } cout << flips << "\n"; return 0; }