Advertisement
mhdew

LIS

Dec 9th, 2018
187
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.96 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. int main()
  6. {
  7.     int n;
  8.     scanf("%d", &n);
  9.     int a[n+2];
  10.     for(int i=0;i<n;i++){
  11.         scanf("%d", &a[i]);
  12.     }
  13.     int lis[n+2];
  14.     int tra[n+2];
  15.  
  16.     for(int i=0;i<n;i++) lis[i]=1;
  17.     for(int i=0;i<n;i++) tra[i]=-1;
  18.  
  19.     for(int i=0;i<n-1;i++){
  20.         for(int j=i+1;j<n;j++){
  21.             if(a[j]>a[i]){
  22.                 if((lis[i]+1)>lis[j]){
  23.                     lis[j]++;
  24.                     tra[j]=i;
  25.                 }
  26.             }
  27.         }
  28.     }
  29.  
  30.     int mx=0;
  31.     int idx;
  32.     for(int i=0;i<n;i++){
  33.         if(lis[i]>mx){
  34.             mx=lis[i];
  35.             idx=i;
  36.         }
  37.     }
  38.     printf("Length of LIS %d\n", mx);
  39.  
  40.     int v[11111];
  41.     int vi=0;
  42.     while(1){
  43.         if(idx==-1) break;
  44.         v[vi]=a[idx];
  45.         vi++;
  46.         idx=tra[idx];
  47.     }
  48.  
  49.     for(int i=vi-1;i>=0;i--){
  50.         printf("%d ", v[i]);
  51.     }
  52.     printf("\n");
  53.  
  54.     return 0;
  55. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement