fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. int getAllKInBetween(int left, int right, vector<int>& totalKTill) {
  5. if (right < left) {
  6. return 0;
  7. }
  8. if (left == 0) {
  9. return totalKTill[right];
  10. }
  11. return totalKTill[right] - totalKTill[left-1];
  12. }
  13.  
  14. int solve(vector<int> nums, int k) {
  15. int n = (int)nums.size();
  16. vector<int> totalKTill(n, 0);
  17. vector<vector<int>> positions(100001);
  18. totalKTill[0] = nums[0] == k;
  19. positions[nums[0]].push_back(0);
  20. for (int i=1; i<n; i++) {
  21. positions[nums[i]].push_back(i);
  22. totalKTill[i] = totalKTill[i-1] + (nums[i] == k);
  23. }
  24. int ans = 0;
  25. for (int element=1; element<100001; element++) {
  26. if (element == k) {
  27. continue;
  28. }
  29. for (int i=0; i<(int)positions[element].size(); i++) {
  30. for (int j=i; j<(int)positions[element].size(); j++) {
  31. ans = max(ans, getAllKInBetween(0,positions[element][i]-1,totalKTill) + j-i+1 + getAllKInBetween(positions[element][j]+1,n-1,totalKTill));
  32. }
  33. }
  34. }
  35. return ans;
  36. }
  37.  
  38. int main() {
  39. // your code goes here
  40. cout << solve({6,4,4,6,4,4}, 6) << "\n";
  41. cout << solve({2,5,2,5,2}, 2) << "\n";
  42. return 0;
  43. }
Success #stdin #stdout 0.01s 5844KB
stdin
Standard input is empty
stdout
5
4