組み合わせ(ai,aj)(a_i, a_j)について、aia_iを固定して考えます。\\ すると、aia_iに対する相手の種類数は、i<jNi < j \leq Nを満たすaja_jの種類数だとわかります。 ai=Xa_i = Xを満たす複数のiiがある場合は、最も小さいiiについて考えれば良いです。\\ そのため、aaを右から順に、各aia_iに対するaja_jの種類数をunordered_setなどを用いて数えながら更新していけば、全てのaia_iについて相手の種類数がわかります。 aia_iの相手の種類数をunordered_mapなどで管理すれば、O(N)O(N)でこの操作を行えます。 最後に、重複を除いた全てのaia_iについて、種類数の和を求めると、これが答えとなります。