제출 #923835

#제출 시각아이디문제언어결과실행 시간메모리
923835AdamGSRope (JOI17_rope)C++17
80 / 100
2549 ms81356 KiB
#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], wynik[LIM], sum;
void dodaj(int x) {
  if(x==-1) return;
  ++ile[x];
  ++sum;
}
void usun(int x) {
  if(x==-1) return;
  --ile[x];
  --sum;
}
void solve(vector<pair<int,int>>T, int m) {
  sum=0;
  rep(i, m) {
    V[i].clear();
    ile[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;
    }
    int ma=0;
    rep(j, m) ma=max(ma, ile[j]);
    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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...