Advertisement
Guest User

Untitled

a guest
May 8th, 2022
202
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.90 KB | None | 0 0
  1. using System;
  2. using System.Linq;
  3.  
  4. namespace P05.LongestIncreasingSubsequence
  5. {
  6.     class LongestIncreasingSubsequence
  7.     {
  8.         static void Main(string[] args)
  9.         {
  10.             int[] numbers = Console.ReadLine()
  11.                 .Split(' ', StringSplitOptions.RemoveEmptyEntries)
  12.                 .Select(int.Parse)
  13.                 .ToArray();
  14.  
  15.             if (numbers.Length == 1)
  16.             {
  17.                 Console.WriteLine(string.Join(' ', numbers));
  18.                 return;
  19.             }
  20.  
  21.             int[] numbersCopy = numbers;
  22.             string currentOutput = numbersCopy[0] + " ";
  23.             int maxNumber = numbersCopy[0];
  24.             int maxLength = -1;
  25.             int[] LIS = new int[0];
  26.             int savedIndex = 0;
  27.  
  28.             for (int currentIndex = 0; currentIndex < numbersCopy.Length; currentIndex++)
  29.             {
  30.                 if (numbersCopy[currentIndex] > maxNumber)
  31.                 {
  32.                     currentOutput += numbersCopy[currentIndex] + " ";
  33.                     maxNumber = numbersCopy[currentIndex];
  34.  
  35.                     int[] currentOutputToArr = currentOutput
  36.                         .Split(' ', StringSplitOptions.RemoveEmptyEntries)
  37.                         .Select(int.Parse)
  38.                         .ToArray();
  39.  
  40.                     if (currentOutputToArr.Length > maxLength)
  41.                     {
  42.                         maxLength = currentOutputToArr.Length;
  43.                         LIS = currentOutputToArr;
  44.                     }
  45.                 }
  46.  
  47.                 if (currentIndex == numbersCopy.Length - 1)
  48.                 {
  49.                     int indexCounter = 0;
  50.                     bool isFoundRedundantIndex = false;
  51.  
  52.                     if (maxNumber == numbersCopy[savedIndex])
  53.                     {
  54.                         int[] newNumbers = new int[numbers.Length - 1];
  55.  
  56.                         for (int currIndex = 0; currIndex < newNumbers.Length; currIndex++)
  57.                         {
  58.                             if (numbers[indexCounter] != maxNumber || isFoundRedundantIndex)
  59.                             {
  60.                                 newNumbers[currIndex] = numbers[indexCounter];
  61.                             }
  62.                             else
  63.                             {
  64.                                 currIndex--;
  65.                                 isFoundRedundantIndex = true;
  66.                             }
  67.  
  68.                             indexCounter++;
  69.                         }
  70.  
  71.                         numbers = newNumbers;
  72.  
  73.                         if (numbers.Length == 0)
  74.                         {
  75.                             break;
  76.                         }
  77.                         numbersCopy = newNumbers;
  78.  
  79.                         currentIndex = -1;
  80.                         currentOutput = numbersCopy[0] + " ";
  81.                         maxNumber = numbersCopy[0];
  82.                         continue;
  83.                     }
  84.  
  85.                     int[] previousNumbers = new int[numbersCopy.Length - 1];
  86.  
  87.                     for (int currIndex = 0; currIndex < previousNumbers.Length; currIndex++)
  88.                     {
  89.                         if (numbersCopy[indexCounter] != maxNumber || isFoundRedundantIndex)
  90.                         {
  91.                             previousNumbers[currIndex] = numbersCopy[indexCounter];
  92.                         }
  93.                         else
  94.                         {
  95.                             currIndex--;
  96.                             isFoundRedundantIndex = true;
  97.                         }
  98.  
  99.                         indexCounter++;
  100.                     }
  101.  
  102.                     numbersCopy = previousNumbers;
  103.                     currentIndex = -1;
  104.                     maxNumber = numbersCopy[0];
  105.                     currentOutput = numbersCopy[0] + " ";
  106.                 }
  107.             }
  108.  
  109.             Console.Write(string.Join(' ', LIS));
  110.         }
  111.     }
  112. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement