This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include<bits/stdc++.h>
using namespace std;
typedef long double ld;
typedef long long ll;
#define rep(a, b) for(int a = 0; a < (b); ++a)
#define st first
#define nd second
#define pb push_back
#define all(a) a.begin(), a.end()
const int LIM=1e6+7;
vector<int>V[LIM];
int ile[LIM], ileile[LIM], wynik[LIM], sum, ma;
void dodaj(int x) {
  if(x==-1) return;
  --ileile[ile[x]];
  ++ile[x];
  ++ileile[ile[x]];
  ma=max(ma, ile[x]);
  ++sum;
}
void usun(int x) {
  if(x==-1) return;
  --ileile[ile[x]];
  --ile[x];
  ++ileile[ile[x]];
  if(!ileile[ma]) --ma;
  --sum;
}
void solve(vector<pair<int,int>>T, int m) {
  sum=ma=0;
  rep(i, LIM) {
    V[i].clear();
    ile[i]=ileile[i]=0;
  }
  int n=T.size();
  rep(i, n) {
    V[T[i].st].pb(i);
    if(T[i].nd!=-1 && T[i].nd!=T[i].st) V[T[i].nd].pb(i);
    dodaj(T[i].st);
    dodaj(T[i].nd);
  }
  rep(i, m) {
    int akt=0;
    for(auto j : V[i]) {
      usun(T[j].st);
      usun(T[j].nd);
      if(T[j].st!=i) ++akt;
      if(T[j].nd!=-1 && T[j].nd!=i) ++akt;
    }
    wynik[i]=min(wynik[i], akt+sum-ma);
    for(auto j : V[i]) {
      dodaj(T[j].st);
      dodaj(T[j].nd);
    }
  }
}
int main() {
  ios_base::sync_with_stdio(0); cin.tie(0);
  int n, m;
  cin >> n >> m;
  rep(i, m) wynik[i]=n;
  vector<int>T(n);
  rep(i, n) {
    cin >> T[i]; --T[i];
  }
  vector<pair<int,int>>P;
  if(n%2==0) {
    rep(i, n/2) P.pb({T[2*i], T[2*i+1]});
    solve(P, m);
    P.clear();
    P.pb({T[0], -1});
    rep(i, n/2-1) P.pb({T[2*i+1], T[2*i+2]});
    P.pb({T[n-1], -1});
    solve(P, m);
  } else {
    rep(i, n/2) P.pb({T[2*i], T[2*i+1]});
    P.pb({T[n-1], -1});
    solve(P, m);
    P.clear();
    P.pb({T[0], -1});
    rep(i, n/2) P.pb({T[2*i+1], T[2*i+2]});
    solve(P, m);
  }
  rep(i, m) cout << wynik[i] << '\n';
}
| # | 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... |