#include #include #include #include using namespace std; int main() { int N; string S; cin >> N >> S; // Priority queue to keep positions of '0's to flip greedily (earliest first) priority_queue, greater> zero_positions; int score = 0; int flips = 0; for (int i = 0; i < N; ++i) { if (S[i] == '1') score++; else { score--; zero_positions.push(i); } // Whenever score <= 0 (invalid substring somewhere), flip a 0 if (score <= 0) { // flip earliest available 0 if (!zero_positions.empty()) { int pos = zero_positions.top(); zero_positions.pop(); // pretend we flipped this 0 to 1 score += 2; flips++; } } } cout << flips << endl; return 0; }