Official

D - Distinct Trio Editorial by kyopro_friends


与えられた条件は「Ai<Aj<AkA_i < A_j < A_k を満たす (i,j,k)(i,j,k) の組の個数を求めよ」と読み替えることができます。

元の条件を満たす (i,j,k)(i,j,k) に対して i,j,ki,j,k の並び替えであって、Ai<Aj<AkA_i \lt A_j \lt A_k を満たすものがただ1つ存在します。逆に、Ai<Aj<AkA_i\lt A_j\lt A_k を満たす (i,j,k)(i,j,k) に対して i,j,ki,j,k の並び替えであって、i<j<ki\lt j\lt kを満たすものがただ1つ存在します。

jj を全探索します。このとき、i,ki,k は独立に選ぶことができます。ii の選択肢の個数は AA に含まれる AjA_j より小さな要素の個数、kk の選択肢の個数は AA に含まれる AjA_j より大きな要素の個数となります。したがって、「AAxx 未満の要素が何個あるか?」を表す配列を予め用意しておくことで、この問題を O(N+maxA)O(N+\max A) で解くことができます。

実装例(Python)

posted:
last update:



2025-04-08 (Tue)
23:30:40 +00:00