μμ΄μ΄ μ£Όμ΄μ§λλ°, νΉμ λΆλΆν©μ΄ 0μ΄ λμ§ μλλ‘ νλ μ΅μ νμλ₯Ό ꡬνλ λ¬Έμ μ΄λ€.
μλ‘
1 -5 3 2
μμ κ°μ μμ΄μ΄ μμ λ,
{-5, 3, 2} μ ν©μ 0μ΄ λλ―λ‘
1 -5 3 {Block} 2
μ λͺ¨μ μ²λΌ μ¬μ΄λ₯Ό λμ΄λμΌ νκ³ 1λ²μΌλ‘ μΆ©λΆνλ―λ‘ λ΅μ 1μ΄λ€.
16 -5 -11 -15 10 5 4 -4
μμ κ²½μ°λ
16 -5 {Block} -11 -15 10 {Block} 5 4 {Block} -4
μ΄ 3λ²μ λ§μμΌ λΆλΆν©μ΄ 0μ΄ λ μ μλ€.
μ΄ λ¬Έμ λ, ꡬκ°ν© μκ³ λ¦¬μ¦μ μ¬μ©ν΄μΌνλ€.
ꡬκ°ν© μκ³ λ¦¬μ¦μ μνλ©΄
λμ ν© μμ΄μ μ΄μ©ν΄μ νΉμ ꡬκ°μ ν©μ ꡬν μ μλ€.
λμ ν© μμ΄ Sum μ΄ μμ λ, μμ΄ Arr[a] ~ Arr[b] μ ν©μ
Sum[b]-Sum[a-1] λ‘ O(1) 볡μ‘λλ‘ κ΅¬ν μ μλ€.
νΉμ μμΉ(kμμΉ)μμ λμ ν©μ ꡬνλλ°, κ·Έ κ°μ΄ μ΄λ―Έ λμ ν© μμ΄μμ μ‘΄μ¬(jμμΉ)νλ€λ©΄
Sum[k]-Sum[j] = 0 μ΄ λ μ μμΌλ―λ‘ λΆλΆν©μ΄ 0μ΄ λλ μκ°μμ μ μ μλ€.
λ°λΌμ, λμ ν©μ mapμ keyλ‘μ¨ μ μ₯ν΄λκ³ μ‘°κ±΄λ¬Έμ νμ©νλ©΄ λλ€.
# ꡬκ°ν© μκ³ λ¦¬μ¦ μ¬μ©
N = int(input())
arr = list(map(int, input().split()))
comSum = [0] * 200001
prefix_sum = {}
ans = 0
for i in range(N):
if i == 0:
prefix_sum[0] = "zero" # λμ ν©μ΄ 0μ΄ λμ΄λ λΆλΆν©μ΄ 0μ΄ λλ μκ°μ΄λ―λ‘
prefix_sum[arr[i]] = "exist" # 첫λ²μ§Έ μμλ μμ κ°μ΄ λμ ν©μ΄λ€.
comSum[i] = arr[i] # 첫λ²μ§Έ μμλ μμ κ°μ΄ λμ ν©μ΄λ€.
else:
sum = arr[i] + comSum[i - 1] # μ§μ μ μ μ₯νλ λμ ν© κ°κ³Ό μμλ₯Ό λνλ©΄ λμ ν©μ΄λ€.
comSum[i] = sum # μ§μ μ μ μ₯νλ λμ ν© κ°κ³Ό μμλ₯Ό λνλ©΄ λμ ν©μ΄λ€.
if sum in prefix_sum: # λμ ν©μ΄ κΈ°λ‘νκ³ μλ λμ ν© mapμ μ‘΄μ¬νλ κ²½μ° λΆλΆν©μ΄ 0μ΄ λλ μκ°μ΄λ€.
ans += 1
prefix_sum.clear() # λμ ν© κΈ°λ‘μ μ΄κΈ°ν νλ€.
prefix_sum[0] = "zero" # λμ ν©μ΄ 0μ΄ λμ΄λ λΆλΆν©μ΄ 0μ΄ λλ μκ°μ΄λ―λ‘
prefix_sum[arr[i]] = "exist" # μ΄κΈ°ν λμμΌλ, λμ ν©μ΄ μλ μμ κ°μ κΈ°λ‘νλ€
comSum[i] = arr[i] # λμ ν©μ κΈ°λ‘νλ λ°°μ΄λ μ΄κΈ°ν μμΌμ€λ€.
else:
prefix_sum[sum] = "exist" # λμ ν© mapμ λμ ν©κ³Ό κ°μ κ°μ΄ μ‘΄μ¬νμ§ μμΌλ©΄ κ³μ κΈ°λ‘νλ€.
print(ans)