Link to this code:
https://cses.fi/paste/1983e91b6e70ca2ccf942e/
#include<iostream>
#include<vector>
#include<unordered_map>
using namespace std;
int main() {
int n;
cin >> n;
vector<int> a(n, 0);
for (int i = 0;i < n;++i) cin >> a[i];
unordered_map<int, int> T;
int start = 0;
long long res = 0;
for (int i = 0;i < n;++i) {
if (T.find(a[i]) == T.end()) {
T[a[i]] = i;
}
else {
if (T[a[i]] < start) T[a[i]] = i;
else {
long long num = i - start;
res += (num * (num + 1)) / 2;
num = i - (T[a[i]] + 1);
res -= (num * (num + 1)) / 2;
start = T[a[i]] + 1;
T[a[i]] = i;
}
}
}
long long num = n - start;
res += (num * (num + 1))/2;
cout << res << endl;
}