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;
#define ar array
const int N = 1e6 + 5;
int a[N], res[N], cc[N];
map<int, int> edges[N];
signed main(){
ios::sync_with_stdio(0); cin.tie(0);
int n, m; cin>>n>>m;
for(int i=0;i<n;i++){
cin>>a[i];
a[i]--;
cc[a[i]]++;
}
vector<int> tot(m); iota(tot.begin(), tot.end(), 0);
sort(tot.begin(), tot.end(), [&](int i, int j){
if(cc[i] != cc[j]) return cc[i] > cc[j];
return i > j;
});
{
for(int i=1;i+1<n;i+=2){
edges[a[i]][a[i+1]]++;
edges[a[i+1]][a[i]]++;
}
for(int i=0;i<m;i++){
int rr = 0;
edges[i][i] = cc[i];
vector<ar<int, 2>> t;
for(auto x : edges[i]){
t.push_back({x.first, x.second});
}
sort(t.begin(), t.end(), [&](auto& a, auto& b){
if(cc[a[0]] != cc[b[0]]) return cc[a[0]] > cc[b[0]];
return a[0] > b[0];
});
int l = 0;
for(auto x : t){
if(tot[l] == x[0]) l++;
rr = max(rr, cc[x[0]] - x[1]);
}
if(l < m) rr = max(rr, cc[tot[l]]);
res[i] = max(res[i], rr + cc[i]);
edges[i].clear();
}
}
{
for(int i=0;i+1<n;i+=2){
edges[a[i]][a[i+1]]++;
edges[a[i+1]][a[i]]++;
}
for(int i=0;i<m;i++){
int rr = 0;
edges[i][i] = cc[i];
vector<ar<int, 2>> t;
for(auto x : edges[i]){
t.push_back({x.first, x.second});
}
sort(t.begin(), t.end(), [&](auto& a, auto& b){
if(cc[a[0]] != cc[b[0]]) return cc[a[0]] > cc[b[0]];
return a[0] > b[0];
});
int l = 0;
for(auto x : t){
if(tot[l] == x[0]) l++;
rr = max(rr, cc[x[0]] - x[1]);
}
if(l < m) rr = max(rr, cc[tot[l]]);
res[i] = max(res[i], rr + cc[i]);
edges[i].clear();
}
}
for(int i=0;i<m;i++) cout<<n - res[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... |