You Are So Beautiful (Codeforces 1888C)
Tags: Others, data structures

You are given an array of integers $$$a_1, a_2, \ldots, a_n$$$. Calculate the number of subarrays of this array $$$1 \leq l \leq r \leq n$$$, such that: The array $$$b = [a_l, a_{l+1}, \ldots, a_r]$$$ occurs in the array $$$a$$$ as a subsequence exactly once. In other words, there is exactly one way to select a set of indices $$$1 \leq i_1 < i_2 < \ldots < i_{r - l + 1} \leq n$$$, such that $$$b_j = a_{i_j}$$$ for all $$$1 \leq j \leq r - l + 1$$$.

Input: Each test consists of multiple test cases. The first line contains a single integer $$$t$$$ ($$$1 \leq t \leq 10^4$$$) — the number of test cases. This is followed by their description.The first line of each test case contains an integer $$$n$$$ ($$$1 \leq n \leq 10^5$$$) — the size of the array $$$a$$$.The second line of each test case contains $$$n$$$ integers $$$a_1, a_2, \ldots, a_n$$$ ($$$1 \leq a_i \leq 10^9$$$).It is guaranteed that the sum of $$$n$$$ over all test cases does not exceed $$$2 \cdot 10^5$$$.

Output: For each test case, output the number of suitable subarrays.

Note: In the first test case, there is exactly one subarray $$$(1, 1)$$$ that suits us.In the second test case, there is exactly one subarray $$$(1, 2)$$$ that suits us. Subarrays $$$(1, 1)$$$ and $$$(2, 2)$$$ do not suit us, as the subsequence $$$[1]$$$ occurs twice in the array.In the third test case, all subarrays except $$$(1, 1)$$$ and $$$(3, 3)$$$ are suitable.

Sample Inputs:
6
1
1
2
1 1
3
1 2 1
4
2 3 2 1
5
4 5 4 5 4
10
1 7 7 2 3 4 3 2 1 100

Sample Outputs:
1
1
4
7
4
28

Solution (Python):
def solve():
    n = input()
    a = list(map(int, input().split()))
    last = dict()
    for (i, v) in enumerate(a):
        last[v] = i
    s = set()
    uc = 0
    ans = 0
    for (i, v) in enumerate(a):
        if v not in s:
            s.add(v)
            uc += 1
        if last[v] == i:
            ans += uc
    print(ans)
    return
if __name__ == '__main__':
    t = 1
    t = int(input())
    while t > 0:
        t -= 1
        solve()

Solution (Python):
t = int(input())
for _ in range(t):
    n = int(input())
    a = list(map(int, input().split()))
    d = {}
    for num in a:
        if num in d:
            d[num] = len(d)
        else:
            d[num] = len(d) + 1
    ans = 0
    for num in d:
        ans += d[num]
    print(ans)

Solution (Python):
def solve():
    n = int(input())
    a = list(map(int, input().split()))
    prefix = [0] * n
    st = set()
    st.add(a[0])
    prefix[0] = 1
    for i in range(1, n):
        prefix[i] = prefix[i - 1]
        if a[i] not in st:
            st.add(a[i])
            prefix[i] += 1
    st.clear()
    ans = 0
    for i in range(n - 1, -1, -1):
        if a[i] not in st:
            st.add(a[i])
            ans += prefix[i]
    print(ans)
t = int(input())
for i in range(0, t):
    solve()