Advertisement
Guest User

Untitled

a guest
Mar 24th, 2019
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.87 KB | None | 0 0
  1. using System;
  2. using System.Linq;
  3.  
  4. class Link
  5. {
  6. public int Value { get; private set; }
  7.  
  8. public Link Left { get; private set; }
  9. public Link Right { get; private set; }
  10.  
  11. public Link(Link end, int x)
  12. {
  13. this.Value = x;
  14.  
  15. this.Left = end;
  16. this.Right = null;
  17.  
  18. if (end != null)
  19. {
  20. end.Right = this;
  21. }
  22. }
  23.  
  24. public static void Detach(Link x)
  25. {
  26. if (x.Left != null)
  27. {
  28. x.Left.Right = null;
  29. }
  30. if (x.Right != null)
  31. {
  32. x.Right.Left = null;
  33. }
  34.  
  35. x.Left = null;
  36. x.Right = null;
  37. }
  38.  
  39. public static void Attach(Link l, Link r)
  40. {
  41. if (l == r)
  42. {
  43. return;
  44. }
  45.  
  46. l.Right = r;
  47. r.Left = l;
  48. }
  49. }
  50.  
  51. class Program
  52. {
  53. static void Main()
  54. {
  55. int n = int.Parse(Console.ReadLine());
  56. var swaps = Console.ReadLine()
  57. .Split(' ')
  58. .Select(int.Parse)
  59. .ToArray();
  60.  
  61. var links = new Link[n + 1];
  62. for (int i = 1; i <= n; ++i)
  63. {
  64. links[i] = new Link(links[i - 1], i);
  65. }
  66.  
  67. var leftEnd = links[1];
  68. var rightEnd = links[n];
  69.  
  70. foreach (int x in swaps)
  71. {
  72. var middle = links[x];
  73. var newRight = middle.Left;
  74. var newLeft = middle.Right;
  75.  
  76. Link.Detach(middle);
  77. Link.Attach(rightEnd, middle);
  78. Link.Attach(middle, leftEnd);
  79.  
  80. leftEnd = newLeft ?? middle;
  81. rightEnd = newRight ?? middle;
  82. }
  83.  
  84. var numbers = new int[n];
  85. for (int i = 0; i < n; ++i)
  86. {
  87. numbers[i] = leftEnd.Value;
  88. leftEnd = leftEnd.Right;
  89. }
  90.  
  91. Console.WriteLine(string.Join(" ", numbers));
  92. }
  93. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement