ABDELRHMAN_SAEED007

Untitled

Sep 12th, 2025
470
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.01 KB | Source Code | 0 0
  1. using ll=long long;
  2. ll n,m;
  3. ll dp[10005][305];
  4. ll ar[10005];
  5. using  pi=pair<ll,ll>;
  6. #define all(x)  x.begin(),x.end()
  7. vector<vector<ll>>idx;
  8.  
  9. class Solution {
  10. public:
  11.  
  12. ll fun(ll i,ll last)
  13. {
  14.  
  15.     ll &ret=dp[i][last];
  16.     if (~ret)return ret;
  17.  
  18.     ret=1;
  19.     ll mn=max(1LL,ar[i]-last);
  20.     ll mx=min(m,ar[i]+last);
  21.     for (int k=mn;k<=mx;k++)
  22.     {
  23.         ll j=idx[i+1][k];
  24.         if (j!=-1){
  25.             ll diff=abs(k-ar[i]);
  26.             ret=max(ret,1+fun(j,diff));
  27.         }
  28.     }
  29.     return ret;
  30. }
  31.     int longestSubsequence(vector<int>& nums) {
  32.        
  33.         n=nums.size();
  34.         for(int i=0;i<n;i++)ar[i]=nums[i];
  35.         m=0;
  36.          for (int i=0;i<n;i++)m=max(m,ar[i]);
  37.         for(int i=0;i<=n;i++)
  38.         for(int j=0;j<=m;j++)
  39.         dp[i][j]=-1;
  40.         idx=vector<vector<ll>>(n+1,vector<ll>(m+1,-1));
  41.         for (int i=n-1;i>=0;i--)idx[i]=idx[i+1],idx[i][ar[i]]=i;
  42.  
  43.         ll ans=0;
  44.  
  45.         for (int i=0;i<n;i++)ans=max(ans,fun(i,m));
  46.        return ans;
  47.     }
  48. };
Advertisement
Add Comment
Please, Sign In to add comment