Link to this code:
https://cses.fi/paste/00b7e081703e954cf4205c/#include<iostream>
#include<unordered_map>
int main() {
std::ios_base::sync_with_stdio(false);
std::cin.tie(NULL);
int n = 0;
std::cin >> n;
std::unordered_map<int, int> last_incidence_table;
long long count = 0LL;
int i = 1;
int j = 1;
while (j < n + 1) {
int x_j = 0;
std::cin >> x_j;
int last_incidence_table_x_j = last_incidence_table[x_j];
if (last_incidence_table_x_j >= i) {
i = last_incidence_table_x_j + 1;
}
last_incidence_table[x_j] = j;
count = count + (long long)j - (long long)i + 1LL;
j = j + 1;
}
std::cout << count << std::endl;
return 0;
}
// \{(i,j) \mid (i,j) \in [0,n)^{2}, i \leq j \} = \cup_{k\in [0,n)} \{(i,j) \mid (i,j) \in [0,n)^{2}, i \leq j, j = k \}
// $HOMEBREW_PREFIX/opt/llvm@21/bin/clang++ -std=c++23 distinct_values_subarrays2.cpp -o distinct_values_subarrays2