Advertisement
Guest User

Untitled

a guest
May 4th, 2022
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.77 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.             string previousOutput = string.Empty;
  16.             int[] LIS = new int[0];
  17.             int lengthOfTheLIS = int.MinValue;
  18.  
  19.             for (int currentNumber = 0; currentNumber < numbers.Length; currentNumber++)
  20.             {
  21.                 string currentOutput = numbers[currentNumber].ToString();
  22.                 int savedIndexOfCurrentNumber = currentNumber;
  23.                 int savedIndex = 0;
  24.                 int counter = 0;
  25.                 bool counterIsOn = true;
  26.                 int lastMaxNumber = currentNumber;
  27.  
  28.                 for (int currentIndex = currentNumber + 1; currentIndex < numbers.Length; currentIndex++)
  29.                 {
  30.                     if (counterIsOn)
  31.                     {
  32.                         counter++;
  33.                     }
  34.  
  35.                     if (numbers[currentIndex] > numbers[currentNumber])
  36.                     {
  37.                         previousOutput = currentOutput;
  38.                         currentOutput += " " + numbers[currentIndex];
  39.  
  40.                         int[] numbersInTheLIS = currentOutput
  41.                             .Split(' ', StringSplitOptions.RemoveEmptyEntries)
  42.                             .Select(int.Parse)
  43.                             .ToArray();
  44.  
  45.                         if (numbersInTheLIS.Length > lengthOfTheLIS)
  46.                         {
  47.                             lengthOfTheLIS = numbersInTheLIS.Length;
  48.                             LIS = numbersInTheLIS;
  49.                             savedIndex = currentIndex;
  50.                         }
  51.  
  52.                         lastMaxNumber = currentNumber;
  53.                         currentNumber = currentIndex;
  54.                         counterIsOn = false;
  55.                         continue;
  56.                     }
  57.  
  58.                     if (counter == numbers.Length - 1)
  59.                     {
  60.                         break;
  61.                     }
  62.  
  63.                     if (currentIndex == numbers.Length - 1)
  64.                     {
  65.                         currentNumber = lastMaxNumber;
  66.                         currentIndex = savedIndex;
  67.                         currentOutput = previousOutput;
  68.  
  69.                         if (lastMaxNumber == savedIndexOfCurrentNumber)
  70.                         {
  71.                             counterIsOn = true;
  72.                         }
  73.                     }
  74.                 }
  75.             }
  76.  
  77.             Console.WriteLine(string.Join(' ', LIS));
  78.         }
  79.     }
  80. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement