#include<bits/stdc++.h>
typedef long long ll;
#define pb push_back
#define fr first
#define sc second
#define endl '\n'
using namespace std;
#define mid ((left+right)>>1)
int n,m;
int arr[1000023];
map<int,int>mpt[1000023],mpc[1000023];
int cntc[1000023],cntt[1000023];
multiset<int>tek,cift;
int main(){
	ios_base::sync_with_stdio(23^23);cin.tie(NULL);
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		cin>>arr[i];
		cntc[arr[i]]++;
		cntt[arr[i]]++;
	}
	for(int i=1;i<=n-1;i+=2){
		if(arr[i]==arr[i+1])continue;
		mpc[arr[i]][arr[i+1]]++;
		mpc[arr[i+1]][arr[i]]++;
	}
	for(int i=2;i<=n-1;i+=2){
		if(arr[i]==arr[i+1])continue;
		mpt[arr[i]][arr[i+1]]++;
		mpt[arr[i+1]][arr[i]]++;
	}
	for(int i=0;i<=m;i++){
		tek.insert(cntt[i]);
		cift.insert(cntc[i]);
	}
	for(int i=1;i<=m;i++){
		for(auto[a,b]:mpc[i]){
			cift.erase(cift.find(cntc[a]));
			cntc[a]-=b;
			cift.insert(cntc[a]);
		}
		for(auto[a,b]:mpt[i]){
			tek.erase(tek.find(cntt[a]));
			cntt[a]-=b;
			tek.insert(cntt[a]);
		}
		tek.erase(tek.find(cntt[i]));
		cift.erase(cift.find(cntc[i]));
		int res=n-cntt[i]-max(*(--tek.end()),*(--cift.end()));
		tek.insert(cntt[i]);
		cift.insert(cntc[i]);
		for(auto[a,b]:mpc[i]){
			cift.erase(cift.find(cntc[a]));
			cntc[a]+=b;
			cift.insert(cntc[a]);
		}
		for(auto[a,b]:mpt[i]){
			tek.erase(tek.find(cntt[a]));
			cntt[a]+=b;
			tek.insert(cntt[a]);
		}
		cout<<res<<endl;
	}
}
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |