using
System;
using
System.Collections.Generic;
public
class
GFG {
public
static
int
findmax_zeroprefixes(
int
[] arr,
int
n)
{
int
[] prefix_sum =
new
int
[n];
bool
[] endmark =
new
bool
[n];
bool
flag =
false
;
int
max_freq = 0;
int
res = 0;
if
(arr[0] == 0) {
flag =
true
;
}
for
(
int
i = 0; i < n; i++) {
if
(i + 1 < n) {
if
(arr[i + 1] == 0) {
endmark[i] =
true
;
}
else
{
endmark[i] =
false
;
}
}
else
{
endmark[i] =
true
;
}
}
prefix_sum[0] = arr[0];
for
(
int
i = 1; i < n; i++) {
prefix_sum[i] = prefix_sum[i - 1] + arr[i];
}
res = 0;
Dictionary<
int
,
int
> freq
=
new
Dictionary<
int
,
int
>();
max_freq = 0;
for
(
int
i = 0; i < n; i++) {
if
(endmark[i] ==
false
) {
if
(!freq.ContainsKey(prefix_sum[i])) {
freq.Add(prefix_sum[i], 1);
}
else
{
freq[prefix_sum[i]]++;
}
max_freq = Math.Max(max_freq,
freq[prefix_sum[i]]);
}
else
{
if
(!freq.ContainsKey(prefix_sum[i])) {
freq.Add(prefix_sum[i], 1);
}
else
{
freq[prefix_sum[i]]++;
}
max_freq = Math.Max(max_freq,
freq[prefix_sum[i]]);
if
(flag ==
false
) {
if
(freq.ContainsKey(0)) {
res = res + freq[0];
}
max_freq = 0;
freq.Clear();
flag =
true
;
}
else
{
res = res + max_freq;
freq.Clear();
max_freq = 0;
}
}
}
return
res;
}
static
public
void
Main()
{
int
[] arr = { 2, 0, 1, -1, 0 };
int
n = arr.Length;
Console.WriteLine(findmax_zeroprefixes(arr, n));
}
}