Advertisement
ivnikkk

Untitled

Dec 4th, 2021
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.38 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4. #include <cmath>
  5. #include <iomanip>
  6. #include <fstream>
  7. #include <string>
  8. #include <set>
  9. #include <deque>
  10. #include <queue>
  11. #include <map>
  12. #include <bitset>
  13. #include <random>
  14. #include <cassert>
  15. #include <unordered_map>
  16. #include <unordered_set>
  17. using namespace std;
  18. typedef long long              ll;
  19. typedef unsigned long long     ull;
  20. typedef long double            ld;
  21. #define sqrt              sqrtl
  22. #define endl              "\n"
  23. #define all(a)            a.begin(), a.end()
  24. #define allr(a)           a.rbegin(), a.rend()
  25. #define pb                push_back
  26. #define F                 first
  27. #define S                 second
  28. //3
  29. //4
  30. //4 4 4 4
  31. //0
  32. //4
  33. //1 2 4 4
  34. //1
  35. void solve() {
  36. }
  37.  
  38. signed main() {
  39.     ios_base::sync_with_stdio(false);
  40.     cin.tie(nullptr);
  41.     ll t = 1;
  42.     cin >> t;
  43.     //ll iff = 0;
  44.     //1 1 2 1 4 4 1
  45.     while (t--) {
  46.         ll n;
  47.         cin >> n;
  48.         vector<vector<ll>>dp(n, vector<ll>(201,0));
  49.         vector<ll>a(n);
  50.         for (ll i = 0; i < n; i++)
  51.             cin >> a[i];
  52.         ll cur = 200;
  53.         dp[0][a[0]]++;
  54.         ll count = 0;
  55.  
  56.         ll loll = -1;
  57.         for (ll i = 1; i < n; i++) {
  58.             for (ll j = 1; j <= cur; j++) {
  59.                 dp[i][j] = dp[i - 1][j] + (a[i] == j);
  60.             }
  61.         }
  62.         for (ll i = 1; i <= cur; i++) {
  63.             if (dp[n - 1][i])
  64.                 count++;
  65.         }
  66.         if (count == n) {
  67.             cout << 1 << endl;
  68.             continue;
  69.         }
  70.         if (count == 1) {
  71.             for (ll i = 1; 1 <= cur; i++) {
  72.                 if (dp[n - 1][i]) {
  73.                     //cout << "case #" << iff << ' ';
  74.                     cout << dp[n - 1][i] << endl;
  75.                     //iff++;
  76.                     break;
  77.                 }
  78.             }
  79.             continue;
  80.         }
  81.         else if (count == 2) {
  82.             ll cnt = 0;
  83.             for (ll i = 1; i < n; i++) {
  84.                 if (a[i] != a[i - 1]) {
  85.                     cnt++;
  86.                     loll = max(dp[n - 1][a[i]], dp[n - 1][a[i - 1]]);
  87.                 }
  88.             }
  89.             if (cnt == 1) {
  90.                 //cout << "case #" << iff<<' ';
  91.                 cout<<  loll << endl;
  92.                 //iff++;
  93.                 continue;
  94.             }
  95.         }
  96.         ll mx = -1;
  97.         for (ll i = 0; i < n; i++) {
  98.             for (ll j = 1; j <= cur; j++) {
  99.                 ll check = dp[n - 1][j] - 2 * dp[i][j];
  100.                 if (dp[n - 1][j] - 2 * dp[i][j] >= 0) {
  101.                     ll l = i, r = n;
  102.                     ll ok = dp[n - 1][j] - dp[i][j];
  103.                     while (r - l > 1) {
  104.                         ll mid = (r + l) / 2;
  105.                         if (dp[mid][j] <=ok) {
  106.                             l = mid;
  107.                         }
  108.                         else
  109.                             r = mid;
  110.                     }
  111.                     ll mex = -1;
  112.                     for (ll f = 1; f <= cur; f++) {
  113.                         if(f!=j)
  114.                         mex = max(dp[l][f] - dp[i][f], mex);
  115.                     }
  116.                     mx = max(mex + 2 * dp[i][j], mx);
  117.                     mx = max(mx, *max_element(all(dp[n - 1])));
  118.                 }
  119.             }
  120.         }
  121.         //cout << "case #" << iff << ' ';
  122.         cout << mx << endl;
  123.        // iff++;
  124.     }
  125. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement