Truy vấn hoán vị

View as PDF

Submit solution

Points: 1.07 (partial)
Time limit: 1.0s
Memory limit: 512M
Input: stdin
Output: stdout

Problem source:
COI 2010
Problem type
Allowed languages
C, C++, Go, Java, Kotlin, Pascal, PyPy, Python, Rust, Scratch

Cho một hoán vị của dãy ~n~ phần tử ~a_1~, ~a_2~, ..., ~a_n~ gọi là hoán vị gốc và một số các truy vấn hoán vị.

Một truy vấn hoán vị là một cặp (~i~, ~j~) (~1~ ~\leq~ ~i~ ~\leq~ ~j~ ~\leq~ ~n~). Với mỗi truy vấn hoán vị (~i~, ~j~), bạn đổi chỗ ~2~ phần tử tại vị trí ~i~ và vị trí ~j~ và in ra số hiệu hoán vị của dãy hoán vị mới đó. Các truy vấn không ảnh hưởng đến hoán vị gốc.

Ví dụ, nếu hoán vị gốc là (~1~, ~5~, ~4~, ~2~, ~3~) và các cặp là (~1~, ~3~), (~2~, ~3~) và (~2~, ~5~) thì ta sẽ thu được ~3~ hoán vị là: (~4~, ~5~, ~1~, ~2~, ~3~), (~1~, ~4~, ~5~, ~2~, ~3~) và (~1~, ~3~, ~4~, ~2~, ~5~). Chúng có các số hiệu là ~91~, ~17~ và ~9~.

Yêu cầu

In ra số hiệu của các hoán vị. Các số này có thể rất lớn nên đưa ra sau khi đã mod ~10^9 + 7~.

Input

  • Dòng ~1~: ~n~ (~1~ ~\leq~ ~n~ ~\leq~ ~3 \times 10^5~) và ~q~ (~1~ ~\leq~ ~q~ ~\leq~ ~10^5~) số lượng truy vấn hoán vị.
  • Dòng ~2~: ~n~ số ~a_1~, ~a_2~, ..., ~a_n~.
  • Trong ~q~ dòng sau, mỗi dòng chứa ~2~ số ~i~, ~j~ biểu thị một truy vấn hoán vị (~1~ ~\leq~ ~i~ ~\leq~ ~j~ ~\leq~ ~n~).

Output

In ra ~q~ số nguyên, mỗi số ~1~ dòng là số hiệu của mỗi hoán vị mod ~10^9 + 7~ theo thứ tự xuất hiện trong input.

Sample Input

5 3
1 5 4 2 3
1 3
2 3
2 5

Sample Output

91
17
9

Comments

Please read the guidelines before commenting.


There are no comments at the moment.