N=int(input()) A=list(map(int,input().split())) from random import randint z=randint(1,10**8) B=set() for i in range(N): B.add(A[i]^z) B=list(B) T={} for i in range(len(B)): T[B[i]]=i for i in range(N): A[i]=T[A[i]^z] from collections import deque S=deque() v=[0]*(N+1) S.append((0,N-1)) result=0 G=[[] for i in range(N+1)] for i in range(N): G[A[i]].append(i) from bisect import bisect_left,bisect_right used=[False]*N while S: l,r=S.pop() if l>r: continue for i in range(l,r+1): v[A[i]]+=1 h=[] for i in range(l,r+1): if v[A[i]]==1: h.append(i) while h: pos=h.pop() used[pos]=True if posr: continue m0=pos-l m1=r-pos result+=1 if m0>=m1: S.append((pos+1,r)) for j in range(pos,r+1): v[A[j]]-=1 if v[A[j]]==1: f=bisect_left(G[A[j]],l) e=G[A[j]][f] if l<=e