

- 슬라이딩 윈도우(set)로 연속 구간을 유지
right을 늘려가며 값을 윈도우에 추가
- 중복이 생기면 윈도우 내에 중복이 없을 때까지
left를 오른쪽으로 옮기면서 중복 제거
- 윈도우 내에 중복이 없다면,
right을 끝으로 하는 부분수열 개수 = (right - left + 1)를 cnt에 누적
-> O(n)만에 탐색 가능
right을 끝으로 하는 부분수열 개수:
ex) 윈도우에 [2, 3, 4]가 존재한다면
[2, 3, 4], [3, 4], [4] -> 총 right - left + 1개 존재! (그 외 가능한 [2, 3] 등은 이미 3이 right일 때 카운팅 되었음)
from collections import deque
n = int(input())
nums = list(map(int, input().split()))
left = 0
right = 0
s = set()
cnt = 0
for right in range(n):
while nums[right] in s:
s.remove(nums[left])
left += 1
s.add(nums[right])
cnt += right - left + 1
print(cnt)