競技プログラミングのためのF#入門
1 2 3
let N = stdin.ReadLine() |> int let Aa = stdin.ReadLine().Split() |> Array.map int solve N Aa |> Array.map string |> String.concat " " |> stdout.WriteLine
問題を分解して考えます. まず対処すべきは指定通りの要素の順序づけです. 同じ値を持つ要素があるため一意化した上でソートすればよいでしょう. あとは値と順番に対する辞書を作り, 逆引きして要素に順番を割り当てれば求める結果が得られます.
方針で書いた通りに関数を積めば終わりです.
let flip (a,b) = (b,a) let Xm = Aa |> Array.distinct |> Array.sort |> Array.indexed |> Array.map flip |> Map Aa |> Array.map (fun x -> Xm.[x]+1)