Lịch sử cực đại

Đề bài

Mô tả

Cho một mảng a gồm n phần tử. Với một cách sắp xếp (hoán vị) cụ thể của mảng, ta định nghĩa giá trị fa như sau:

  • Ban đầu fa=0M=1.
  • Với mỗi i từ 2 đến n: nếu aM<ai thì gán fa=fa+aM, sau đó gán M=i.

Nói cách khác, ta duyệt mảng từ trái sang phải và giữ vị trí M của phần tử lớn nhất gặp được cho tới hiện tại. Mỗi khi gặp một phần tử lớn hơn hẳn phần tử đang giữ, ta cộng giá trị phần tử đang giữ vào fa rồi chuyển sang giữ phần tử mới.

Hãy tính tổng của fa trên tất cả n! hoán vị của mảng, lấy phần dư khi chia cho 109+7.

Hai phần tử được coi là khác nhau nếu chỉ số của chúng khác nhau, nên với mỗi mảng luôn có đúng n! hoán vị (kể cả khi có các phần tử bằng nhau về giá trị).

Dữ liệu vào

  • Dòng đầu chứa số nguyên n — số phần tử của mảng.
  • Dòng thứ hai chứa n số nguyên a1,a2,,an.

Dữ liệu ra

  • In ra một số nguyên duy nhất: tổng fa trên tất cả n! hoán vị, lấy dư cho 109+7.

Ràng buộc

  • 1n106
  • 1ai109

Ví dụ

Input Output Giải thích
2
1 3
1 Hai hoán vị: [1,3] cho fa=1; [3,1] cho fa=0. Tổng bằng 1.
3
1 1 2
4 Gọi p là mảng chỉ số. Sáu hoán vị [1,2,3],[1,3,2],[2,1,3],[2,3,1] đều cho fa=1, còn [3,1,2],[3,2,1] cho fa=0. Tổng bằng 4.

Bình luận

Không có bình luận tại thời điểm này.

gnatmake 12.2.0 a68g 3.1.2 nasm 2.16.1 as_x64 2.46 awk 1.3.4 gcc 16.1.0 csc 6.12.0.200 g++ 16.1.0 g++-themis 16.1.0 g++17 16.1.0 g++20 16.1.0 g++23 16.1.0 clang++ 22.1.6 dmd 2.112.0 dart 3.12.1 gforth 0.7.3 gfortran 12.2.0 GO groovyc 5.0.6 javac 25.0.3 node 26.2.0 kotlinc 2.3.21 sbcl 2.2.9 lua 5.4.8 nim 2.2.10 fpc 3.2.2 fpc-themis 3.2.2 perl 5.36.0 php 8.5.6 pike 8.0 pypy3 7.3.23 python3 3.14.5 racket 8.7 ruby 4.0.5 rustc 1.96.0 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 tclsh 8.6 bun 1.3.14 deno 2.8.1 v 0.5.1 zig 0.16.0