Rust Equi Leader
fn equi_leader(a: &[i64]) -> i64 {
    let mut leader_size = 0i64;
    let mut value = 0;
    for &v in a {
        if leader_size == 0 {
            leader_size += 1;
            value = v;
        } else if value != v {
            leader_size -= 1;
        } else {
            leader_size += 1;
        }
    }
    let candidate = if leader_size > 0 { value } else { -1 };

    let leader_count = a.iter().filter(|&&v| v == candidate).count() as i64;
    let leader = if leader_count > a.len() as i64 / 2 { candidate } else { -1 };

    let count = a.len() as i64;
    let mut l_leader_count = 0i64;
    let mut equi_leaders = 0i64;

    for (k, &v) in a.iter().enumerate() {
        let k = k as i64;
        let left_half = (k + 1) / 2;
        let right_half = (count - k - 1) / 2;
        if v == leader {
            l_leader_count += 1;
        }

        let r_leader_count = leader_count - l_leader_count;
        if l_leader_count > left_half && r_leader_count > right_half {
            equi_leaders += 1;
        }
    }

    equi_leaders
}

This keeps leader counts on both sides of the split and counts positions where the same leader survives in each half.