Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- #define ll long long
- #define N ((int)6e4 + 5)
- #define MOD ((int)1e9 + 7)
- #define MAX ((int)1e9 + 7)
- #define MAXL ((ll)1e18 + 7)
- #define MAXP ((int)1e3 + 7)
- #define thr 1e-8
- #define pi acos(-1) /// pi = acos ( -1 )
- #define fastio ios_base::sync_with_stdio(false),cin.tie(NULL)
- #define endl "\n"
- using namespace std;
- int lastEle[N] , dpp[N];
- int BinarySearch(int arr[] , int cur , int lef , int rig){ /// arr[i] < cur && rightmost
- while(lef < rig){
- int mid = (lef + rig + 1)/2;
- if(arr[mid] < cur) lef = mid;
- else rig = mid - 1;
- }
- return lef;
- }
- int main()
- {
- for(int i = 1 ; i <= n ; i++){
- int lastEle = arr[i] , ans = 1;
- for(int j = 1 ; j < i ; j++){
- int secondLast = arr[j];
- if(secondLast < lastEle){
- ans = max(ans , dpp[j] + 1);
- }
- }
- dpp[i] = ans;
- } /// O(n*n)
- lastEle[0] = -MAX;
- for(int i = 1 ; i <= n ; i++) lastEle[i] = MAX;
- for(int i = 1 ; i <= n ; i++){
- // int ans;
- // for(int len = 0 ; ; len++){
- // if(lastEle[len] < arr[i]){
- // ans = len + 1;
- // }
- // }
- int ans = BinarySearch(lastEle , arr[i] , 0 , n) + 1;
- dpp[i] = ans;
- lastEle[ans] = min( arr[i] , lastEle[ans] );
- } /// O(n*logn)
- int ans = 0;
- for(int i = 1 ; i <= n ; i++) ans = max(ans , dpp[i]);
- cout<<ans<<endl;
- vector < int > List;
- int Last = MAX;
- for(int i = n ; i > 0 ; i--){
- if(ans == dpp[i] && arr[i] < Last){
- List.push_back(arr[i]);
- ans--;
- Last = arr[i];
- }
- }
- reverse(vec.begin() , vec.end());
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement