54 lines
999 B
Rust
54 lines
999 B
Rust
use std::io::{read_to_string, stdin};
|
|
|
|
fn fact(x: usize) -> usize {
|
|
static F: [usize; 16] = [
|
|
1,
|
|
1,
|
|
2,
|
|
6,
|
|
24,
|
|
120,
|
|
720,
|
|
5040,
|
|
40320,
|
|
362880,
|
|
3628800,
|
|
39916800,
|
|
479001600,
|
|
6227020800,
|
|
87178291200,
|
|
1307674368000,
|
|
];
|
|
F[x]
|
|
}
|
|
|
|
fn main() {
|
|
let temp = read_to_string(stdin()).unwrap();
|
|
let mut iter = temp
|
|
.split_ascii_whitespace()
|
|
.map(|x| x.parse::<usize>().unwrap());
|
|
|
|
let n = iter.next().unwrap();
|
|
let perm = (0..n).map(|_| iter.next().unwrap()).collect::<Vec<usize>>();
|
|
|
|
let mut vis = vec![false; n];
|
|
|
|
let mut res = 0;
|
|
|
|
for i in 0..n {
|
|
let k = perm[i];
|
|
let r = n - i - 1;
|
|
let mut cnt = 0;
|
|
for j in 0..k {
|
|
if !vis[j] {
|
|
cnt += 1;
|
|
}
|
|
}
|
|
res += fact(r) * cnt;
|
|
// cl
|
|
vis[k] = true;
|
|
}
|
|
|
|
println!("{}", res + 1);
|
|
}
|