Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <algorithm>
- using namespace std;
- vector <int> LIS ( vector <int> &v )
- {
- int n = v.size();
- vector <int> Tam_lis (n, 1);
- vector <int> padre (n, -1);
- int PosMaxLis = 0;
- for (int i=0; i<n; i++)
- {
- for (int j=i; j<n; j++)
- {
- if (v[j] > v[i])
- {
- if (Tam_lis[i]+1 > Tam_lis[j])
- {
- Tam_lis[j] = Tam_lis[i]+1;
- padre[j] = i;
- }
- if (Tam_lis[j] > Tam_lis[ PosMaxLis ])
- PosMaxLis = j;
- }
- }
- }
- vector <int> resultado;
- do
- {
- resultado.push_back( v[PosMaxLis] );
- PosMaxLis = padre[PosMaxLis];
- } while ( PosMaxLis != -1 );
- reverse( resultado.begin(), resultado.end() );
- return resultado;
- }
- int main()
- {
- vector <int> v = {2, 1, 2, 3, 5, 4, 5, 9, 8};
- vector <int> resultado = LIS (v);
- for (int i=0; i<resultado.size(); i++)
- cout<<resultado[i]<<" ";
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment