Problem:
Score : 300 points

Problem Statement

A sequence a_1,a_2,... ,a_n is said to be /\/\/\/ when the following conditions are satisfied:

For each i = 1,2,..., n-2, a_i = a_{i+2}.

Exactly two different numbers appear in the sequence.

You are given a sequence v_1,v_2,...,v_n whose length is even.
We would like to make this sequence /\/\/\/ by replacing some of its elements.
Find the minimum number of elements that needs to be replaced.

Constraints

2 \leq n \leq 10^5

n is even.

1 \leq v_i \leq 10^5

v_i is an integer.

Input

Input is given from Standard Input in the following format:

n
v_1 v_2 ... v_n

Output

Print the minimum number of elements that needs to be replaced.

Sample Input 1

4
3 1 3 2

Sample Output 1

1

The sequence 3,1,3,2 is not /\/\/\/, but we can make it /\/\/\/ by replacing one of its elements: for example, replace the fourth element to make it 3,1,3,1.

Sample Input 2

6
105 119 105 119 105 119

Sample Output 2

0

The sequence 105,119,105,119,105,119 is /\/\/\/.

Sample Input 3

4
1 1 1 1

Sample Output 3

2

The elements of the sequence 1,1,1,1 are all the same, so it is not /\/\/\/.

Solution in C++14 (GCC 5.4.1) (judge verdict: Wrong Answer)

#include "iostream"
#include <stdio.h>
#include <algorithm>
#include <stdlib.h>
#include <string>
#include <math.h>
#include <cctype>
#include <stack>
#include <vector>
#include <list>
#include <queue>
#include <set>
#include <map>
using namespace std;
using ll=long long;
#define MOD  1000000007

int main(int argc, char const *argv[]) {
  ll n,a[200010],f0[200010],f1[200010];

  std::cin >> n;
  std::vector<long long int> u,v;
  for(ll i=0; i<101000; i++){
    f0[i]=0;
    f1[i]=0;
  }

  for(ll i=1; i<=n; i++){
    ll m;
    std::cin >> m;
    a[i]=m;
    if(i%2==0){
       f0[m]++;
       u.push_back(m);
     }
    else{
       f1[m]++;
       v.push_back(m);
  }
}

  if(u==v){
    std::cout << n/2 << '\n';
    return 0;
  }

  ll max0=1, max1=1,j=1,k=1;
  for(ll i=1; i<100010; i++){
    if(f0[i]>max0) {
      max0=f0[i];
      j=i;
    }
  }
  for(ll i=1; i<100010; i++){
    if(f1[i]>max1 ) {
      max1=f1[i];
      k=i;
    }
  }
  while(f0[k]==f1[j]){
  if(f0[j]>f1[k]){
    max1=1;
    for(ll i=1; i<100010; i++){
      if(f1[i]>max1 && i!=j) {
        max1=f1[i];
        j=i;
      }
    }
  }

  else if(f1[j]>f0[k]){
    max0=1;
    for(ll i=1; i<100010; i++){
      if(f0[i]>max0 && i!=k) {
        max0=f0[i];
        k=i;
      }
    }
  }
}
  std::cout << n-max0-max1 << '\n';

  return 0;
}