Advertisement
prakharvk

Longest increasing subsequence

Jun 21st, 2019
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.85 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. pair<int,int> lis(vector<int>&v,vector<int>&l){
  4.     int n=v.size();
  5.     if(n==0)
  6.         return {0,-1};
  7.     vector<int>dp(n,1);
  8.     dp[0]=1;
  9.     int s=1;
  10.     int e=0;
  11.     for(int i=1;i<n;i++){
  12.         for(int j=0;j<i;j++){
  13.             if(v[j]<v[i]&&dp[j]+1>dp[i]){
  14.                 dp[i]=dp[j]+1;
  15.                 l[i]=j;
  16.             }    
  17.         }
  18.         if(s<dp[i]){
  19.             s=dp[i];
  20.             e=i;
  21.         }
  22.     }
  23.     return {s,e};
  24. }
  25. void print(vector<int>&v,vector<int>&p,int e){
  26.     while(e>=0){
  27.         cout<<v[e]<<" ";
  28.         e=p[e];
  29.     }
  30. }
  31.  
  32. int main(){
  33.     int n;
  34.     cin>>n;
  35.     vector<int>v;
  36.     for(int i=0;i<n;i++){
  37.         int c;
  38.         cin>>c;
  39.         v.push_back(c);
  40.     }
  41.     vector<int>l(n,-1);
  42.     int s=lis(v,l).first;
  43.     int e=lis(v,l).second;
  44.     cout<<s<<endl;
  45.     print(v,l,e);
  46.     return 0;
  47. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement