Codeforces Round 157 (Div. 1) |
---|
Закончено |
Маленький Слоник очень любит перестановки целых чисел от 1 до n. Но больше всего он любит их сортировать. Чтобы отсортировать перестановку Маленький Слоник несколько раз меняет некоторые элементы местами. В результате должна получиться перестановка 1, 2, 3, ..., n.
В этот раз у Маленького Слоника есть перестановка p1, p2, ..., pn. Его программа-сортировка должна выполнить ровно m шагов, на i-ом из которых она меняет местами элементы, расположенные в данный момент на ai-той и bi-той позициях. Так случилось, что программа-сортировка Маленького Слоника сломалась, и теперь на каждом шагу она равновероятно может либо не сделать ничего, либо поменять требуемые элементы местами.
Теперь Маленький Слоник даже не надеется, что программа отсортирует перестановку, но все-таки ему интересно, насколько близка будет полученная в результате выполнения программы перестановка к отсортированной. Для этого помогите Маленькому Слонику найти математическое ожидание количества инверсий перестановки после выполнения всех шагов программы.
Пару целых чисел i, j (1 ≤ i < j ≤ n) назовем инверсией в перестановке p1, p2, ..., pn, если выполняется неравенство pi > pj.
В первой строке заданы два целых числа n и m (1 ≤ n, m ≤ 1000, n > 1) — размер перестановки и количество шагов. Во второй строке заданы n различных целых положительных чисел, не превосходящих n — изначальная перестановка. В следующих m строках заданы по два целых числа: в i-той строке записаны числа ai и bi (1 ≤ ai, bi ≤ n, ai ≠ bi) — позиции меняемых на i-том шаге программы элементов.
В единственной строке выведите одно действительное число — ответ на задачу. Ответ будет считать правильным, если его относительная или абсолютная погрешность не превосходит 10 - 6.
2 1
1 2
1 2
0.500000000
4 3
1 3 2 4
1 2
2 3
1 4
3.000000000
Название |
---|