Esempio n. 1
0
    static void Main()
    {
        int n     = int.Parse(Console.ReadLine());
        var swaps = Console.ReadLine()
                    .Split(' ')
                    .Select(int.Parse)
                    .ToArray();

        var links = new Link[n + 1];

        for (int i = 1; i <= n; ++i)
        {
            links[i] = new Link(links[i - 1], i);
        }

        var leftEnd  = links[1];
        var rightEnd = links[n];

        foreach (int x in swaps)
        {
            var middle   = links[x];
            var newRight = middle.Left;
            var newLeft  = middle.Right;

            Link.Detach(middle);
            Link.Attach(rightEnd, middle);
            Link.Attach(middle, leftEnd);

            leftEnd  = newLeft ?? middle;
            rightEnd = newRight ?? middle;
        }

        var numbers = new int[n];

        for (int i = 0; i < n; ++i)
        {
            numbers[i] = leftEnd.Value;
            leftEnd    = leftEnd.Right;
        }

        Console.WriteLine(string.Join(" ", numbers));
    }