Advertisement
_no0B

Untitled

Nov 13th, 2021
1,028
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.74 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. #define ll long long
  3. #define N ((int)6e4 + 5)
  4. #define MOD ((int)1e9 + 7)
  5. #define MAX ((int)1e9 + 7)
  6. #define MAXL ((ll)1e18 + 7)
  7. #define MAXP ((int)1e3 + 7)
  8. #define thr 1e-8
  9. #define pi acos(-1)  /// pi = acos ( -1 )
  10. #define fastio ios_base::sync_with_stdio(false),cin.tie(NULL)
  11. #define endl "\n"
  12.  
  13. using namespace std;
  14.  
  15. int lastEle[N] , dpp[N];
  16.  
  17. int BinarySearch(int arr[] , int cur , int lef , int rig){ /// arr[i] < cur && rightmost
  18.     while(lef < rig){
  19.         int mid = (lef + rig + 1)/2;
  20.         if(arr[mid] < cur) lef = mid;
  21.         else rig = mid - 1;
  22.     }
  23.     return lef;
  24. }
  25.  
  26. int main()
  27. {
  28.  
  29.  
  30.     for(int i = 1 ; i <= n ; i++){
  31.         int lastEle = arr[i] , ans = 1;
  32.  
  33.         for(int j = 1 ; j < i ; j++){
  34.             int secondLast = arr[j];
  35.             if(secondLast < lastEle){
  36.                 ans = max(ans , dpp[j] + 1);
  37.             }
  38.         }
  39.  
  40.         dpp[i] = ans;
  41.     } /// O(n*n)
  42.  
  43.     lastEle[0] = -MAX;
  44.     for(int i = 1 ; i <= n ; i++) lastEle[i] = MAX;
  45.     for(int i = 1 ; i <= n ; i++){
  46. //        int ans;
  47. //        for(int len = 0 ; ; len++){
  48. //            if(lastEle[len] < arr[i]){
  49. //                ans = len  + 1;
  50. //            }
  51. //        }
  52.         int ans = BinarySearch(lastEle , arr[i] , 0 , n) + 1;
  53.         dpp[i] = ans;
  54.         lastEle[ans] = min( arr[i] , lastEle[ans] );
  55.     } /// O(n*logn)
  56.  
  57.     int ans = 0;
  58.     for(int i = 1 ; i <= n ; i++) ans = max(ans , dpp[i]);
  59.     cout<<ans<<endl;
  60.     vector < int > List;
  61.     int Last = MAX;
  62.     for(int i = n ; i > 0 ; i--){
  63.         if(ans == dpp[i] && arr[i] < Last){
  64.             List.push_back(arr[i]);
  65.             ans--;
  66.             Last = arr[i];
  67.         }
  68.     }
  69.  
  70.     reverse(vec.begin() , vec.end());
  71.  
  72. }
  73.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement