module Main; import BinaryHeap; import BoolArray; import CPLib.Arithmetic; import CPLib.DSegtree; import CPLib.Graph; import CPLib.IO; import CPLib.LDSegtree; import CPLib.UnionFind; import CPLib.ZP; import HashMap; import HashSet; main : IO () = ( let n = *read_i; let as = *read_is(n); let bs = range(0, n).fold([0], |i, bs| let a = as.@(i); let b = bs.@(i); bs.push_back(a + b)); let as = as.sort; let ans_for : I64 -> I64 = |a| ( let sum_n = count_up(1).map(|n| let i = as.search_partition_point(|b| b < a * n); // eval "n - i = {}".debug_eprintfln((n - i,)); (as.@size - i) ).take_while(|x| x > 0).sum; bs.@(n) - sum_n * a ); let anss = range(0, n).fold([], |i, anss| let ans = if i > 0 && as.@(i-1) == as.@(i) { anss.@(anss.@size - 1) } else { ans_for(as.@(i)) }; anss.push_back(ans) ); anss.to_iter.sum.to_string.println );