fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. int solve(vector<int>& arr){
  5. int f_1 = 0;
  6. int f_2 = 0;
  7. int f_3 = 0;
  8. int n = arr.size();
  9. int c = 0;
  10. for(int i = 0;i<n;i++){
  11.  
  12. if(arr[i]==1){
  13. c+=f_2 + f_3;
  14. }else if(arr[i]==2){
  15. c+=f_3;
  16. }
  17.  
  18. if(arr[i]==1){
  19. f_1++;
  20. }else if(arr[i]==2){
  21. f_2++;
  22. }else{
  23. f_3++;
  24. }
  25. }
  26.  
  27. return c;
  28. }
  29.  
  30. int main() {
  31. // your code goes here
  32. int n;
  33. cin>>n;
  34.  
  35. vector<int> arr(n);
  36. int f_t_1 = 0;
  37. int f_t_2 = 0;
  38. int f_t_3 = 0;
  39. for(int i = 0;i<n;i++){
  40. cin>>arr[i];
  41.  
  42. if(arr[i]==1){
  43. f_t_1++;
  44. }else if(arr[i]==2){
  45. f_t_2++;
  46. }else{
  47. f_t_3++;
  48. }
  49. }
  50.  
  51.  
  52. int g = solve(arr);
  53. int ans = g;
  54. int f1=0,f2=0,f3=0;
  55. for(int i = 0;i<n;i++){
  56. if(arr[i]==1){
  57. int remove_f = g - f2 - f3;
  58. int turn_2 = remove_f + f3 + f_t_1-f1 -1;
  59. int turn_3 = remove_f + f_t_2 - f2 + f_t_1-f1 - 1;
  60.  
  61. ans = max(ans,max(turn_2,turn_3));
  62. f1++;
  63. }else if(arr[i]==2){
  64. int remove_f = g - f3 - f_t_1 + f1;
  65. int turn_1 = remove_f + f2 + f3;
  66. int turn_3 = remove_f + f_t_1 - f1 + f_t_2 - f2;
  67. ans = max(ans,max(turn_1,turn_3));
  68. f2++;
  69. }else{
  70. int remove_f = g - f_t_1 + f1 - f_t_1 + f1;
  71. int turn_1 = remove_f + f3 + f2;
  72. int turn_2 = remove_f + f3 + f_t_1-f1;
  73. ans = max(ans,max(turn_1,turn_2));
  74. f3++;
  75. }
  76. }
  77.  
  78. cout<<ans;
  79. }
Success #stdin #stdout 0s 5332KB
stdin
Standard input is empty
stdout
Standard output is empty