#include<stdio.h>
#include<stdlib.h>
int asc(const void *a, const void *b)
{
return *(int *)a - *(int *)b;
}
int main()
{
int n;
scanf("%d", &n);
int i;
int v[100005];
for (i = 0; i < n; i++)
scanf("%d", &v[i]);
int o[100005], e[100005];
for (i = 0; i < n; i++)
if (i % 2 == 0)
e[i / 2] = v[i];
else
o[i / 2] = v[i];
int m = n / 2;
qsort(e, m, sizeof(int), asc);
qsort(o, m, sizeof(int), asc);
e[m] = o[m] = -1;
int e1, ne1, o1, no1;
ne1 = no1 = 0;
int x = 1;
for (i = 1; i <= m; i++)
if (e[i] == e[i - 1])
x++;
else
{
if (x > ne1)
{
ne1 = x;
e1 = e[i - 1];
}
x = 1;
}
x = 1;
for (i = 1; i <= m; i++)
if (o[i] == o[i - 1])
x++;
else
{
if (x > no1)
{
no1 = x;
o1 = o[i - 1];
}
x = 1;
}
if (e1 != o1)
{
printf("%d\n", n - ne1 - no1);
return 0;
}
int no2, ne2;
no2 = ne2 = 0;
if (e[0] == e1)
x = 0;
else
x = 1;
for (i = 1; i <= m; i++)
if (e[i] == e[i - 1] && e[i] != e1)
x++;
else
{
if (x > ne2)
ne2 = x;
if (e[i] == e1)
x = 0;
else
x = 1;
}
if (o[0] == o1)
x = 0;
else
x = 1;
for (i = 1; i <= m; i++)
if (o[i] == o[i - 1] && o[i] != o1)
x++;
else
{
if (x > no2)
no2 = x;
if (o[i] == o1)
x = 0;
else
x = 1;
}
if (no2 < ne2)
ne1 = ne2;
else
no1 = no2;
printf("%d\n", n - no1 - ne1);
return 0;
}
./Main.c: In function ‘main’:
./Main.c:10:5: warning: ignoring return value of ‘scanf’, declared with attribute warn_unused_result [-Wunused-result]
scanf("%d", &n);
^
./Main.c:14:9: warning: ignoring return value of ‘scanf’, declared with attribute warn_unused_result [-Wunused-result]
scanf("%d", &v[i]);
^