AlenAntonelli

LIS PROPIA

Oct 23rd, 2018
129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.23 KB | None | 0 0
  1. #include <iostream>
  2. #include <algorithm>
  3. #include <vector>
  4.  
  5. #define numero_actual v[i]
  6.  
  7. using namespace std;
  8.  
  9. vector<int> LIS (const int &n, const vector<int> &v)
  10. {
  11.     vector < vector<int> > r (n+1);
  12.    
  13.     int lis = 1;
  14.    
  15.     r[1].push_back( v[0] );///meto el primer elemento
  16.    
  17.     for (int i=1; i<n; i++) /// recorre todos los numeros
  18.         for (int j=lis; j>=1; j--) /// recorro cada mejor LIS guardada al reves
  19.             if ( numero_actual > r[j].back() ) /// si puede poner el numero al final de esta lista...
  20.                 if ( !r[j+1].size() || numero_actual < r[j+1].back() ) ///y mientras sea mejor añadirla...
  21.                 {
  22.                     lis = max(lis, j+1);
  23.                    
  24.                     r[j+1] = r[j];
  25.                     r[j+1].push_back( numero_actual ); ///la añade;
  26.                 }
  27.    
  28.     return r[lis];
  29. }
  30.  
  31. int main()
  32. {
  33.     int n;
  34.     cin>>n;
  35.    
  36.     vector <int> v (n);
  37.     for (int i=0; i<n; i++)
  38.         cin>>v[i];
  39.        
  40.     for (int i=0; i<n; i++)
  41.         cout<<v[i]<<" ";
  42.      cout<<endl;
  43.      
  44.     vector<int> r = LIS(n, v);
  45.    
  46.     for (int i=0; i<r.size(); i++)
  47.         cout<<r[i]<<" ";
  48.  
  49.     return 0;
  50. }
  51.  
  52. /*  8
  53.     1 7 2 11 15 4 21 9  */
Advertisement
Add Comment
Please, Sign In to add comment