Advertisement
Mahmoud_Hawara

Local Max Version 1

Mar 22nd, 2023
1,240
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.35 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. #pragma GCC optimize("-Ofast")
  6. #pragma GCC optimize("-ffast-math")
  7. #pragma GCC optimize("-funroll-loops")
  8. #pragma GCC optimize("-funroll-all-loops,-fpeel-loops,-funswitch-loops")
  9. #pragma GCC target("sse,sse2,sse3,ssse3,sse4,sse4.2,popcnt,abm,mmx,avx2,tune=native")
  10.  
  11. #define ll long long
  12. #define IO ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  13.  
  14. const int N = 2e6 + 5, M = 1e2 + 5;
  15. const double PI = acos(-1), EPS = 1e-6;
  16. const int dx[8] = {0, 0, 1, -1, 1, 1, -1, -1};
  17. const int dy[8] = {1, -1, 0, 0, 1, -1, 1, -1};
  18. const long long MOD = 1e9 + 7, MOD2 = 998244353, OO = 1e18;
  19.  
  20. int t = 1, n, a[M], ans, mem[M][M][M];
  21.  
  22. int dp(int first, int mid, int i)
  23. {
  24.     if (i == n + 1)return 0;
  25.  
  26.     int &ret = mem[first][mid][i];
  27.     if (~ret)return ret;
  28.  
  29.     int c1 = dp(first, mid, i + 1), c2;
  30.     if (first == 0)c2 = dp(i, 0, i + 1);
  31.     else if (mid == 0)c2 = dp(first, i, i + 1);
  32.     else c2 = (a[mid] > a[first] && a[mid] > a[i])
  33.               + dp(mid, i, i + 1);
  34.  
  35.     return ret = max(c1, c2);
  36. }
  37.  
  38. void solve()
  39. {
  40.     memset(mem, -1, sizeof mem);
  41.     cin >> n;
  42.     for (int i = 1; i <= n; i++)
  43.     {
  44.         cin >> a[i];
  45.     }
  46.     cout << dp(0, 0, 1);
  47.     return;
  48. }
  49.  
  50. int main()
  51. {    
  52.     IO
  53.  
  54.     // cin >> t;
  55.     while (t--)
  56.     {
  57.         solve();
  58.     }
  59.    
  60.     return 0;
  61. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement