[求逆序对] Petr and Permutations CF987E

E. Petr and Permutations

time limit per test

2 seconds

memory limit per test

256 megabytes

input

standard input

output

standard output

Petr likes to come up with problems about randomly generated data. This time problem is about random permutation. He decided to generate a random permutation this way: he takes identity permutation of numbers from 11 to nn and then 3n3n times takes a random pair of different elements and swaps them. Alex envies Petr and tries to imitate him in all kind of things. Alex has also come up with a problem about random permutation. He generates a random permutation just like Petr but swaps elements 7n+17n+1 times instead of 3n3ntimes. Because it is more random, OK?!

You somehow get a test from one of these problems and now you want to know from which one.

Input

In the first line of input there is one integer nn (103≤n≤106103≤n≤106).

In the second line there are nn distinct integers between 11 and nn — the permutation of size nn from the test.

It is guaranteed that all tests except for sample are generated this way: First we choose nn — the size of the permutation. Then we randomly choose a method to generate a permutation — the one of Petr or the one of Alex. Then we generate a permutation using chosen method.

Output

If the test is generated via Petr's method print "Petr" (without quotes). If the test is generated via Alex's method print "Um_nik" (without quotes).

Example

input

Copy

5
2 4 5 1 3

output

Copy

Petr

Note

Please note that the sample is not a valid test (because of limitations for nn) and is given only to illustrate input/output format. Your program still has to print correct answer to this test to get AC.

Due to randomness of input hacks in this problem are forbidden.

计算将输出序列交换成1 ~ n最少需要几步 即求逆序对数 确定奇偶性
3n+1 和 7n 次交换后得到的序列逆序对数必然一奇一偶

#include<bits/stdc++.h>
#define ll long long 
using namespace std;

const int mn = 1e6 + 10;

int n, bit[mn];
int sum(int i)
{
    int ans = 0;
    while (i > 0)
    {
        ans += bit[i];
        i -= i & -i;
    }
    return ans;
}
void add(int i)
{
    while (i <= n)
    {
        bit[i]++;
        i += i & -i;
    }
}

int main()
{
    ll ans = 0;
    scanf("%d", &n);
    for (int i = 0; i < n; i++)
    {
        int x;
        scanf("%d", &x);
        ans += sum(n) - sum(x);
        add(x);
    }
    
    if ((3 * n - ans) % 2 == 0)
        printf("Petr\n");
    else 
        printf("Um_nik\n");
    
    return 0;
}

猜你喜欢

转载自blog.csdn.net/ummmmm/article/details/84325551