Submission #991323

#TimeUsernameProblemLanguageResultExecution timeMemory
991323irmuunRope (JOI17_rope)C++17
100 / 100
1713 ms147196 KiB
#include<bits/stdc++.h> using namespace std; #define ll long long #define pb push_back #define ff first #define ss second #define all(s) s.begin(),s.end() #define rall(s) s.rbegin(),s.rend() int main(){ ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); ll n,m; cin>>n>>m; ll c[n+5]; vector<ll>pos[m+5],cnt(m+5,0); for(ll i=1;i<=n;i++){ cin>>c[i]; cnt[c[i]]++; pos[c[i]].pb(i); } vector<ll>even(m+5,0),odd(m+5,0); multiset<ll,greater<ll>>C; for(ll i=1;i<=m;i++){ C.insert(cnt[i]); } for(ll i=1;i<=m;i++){ set<ll>st; for(ll p:pos[i]){ if(p>1&&c[p-1]!=i){ if(p%2==0) even[c[p-1]]++; else odd[c[p-1]]++; st.insert(c[p-1]); } if(p<n&&c[p+1]!=i){ if(p%2==1) even[c[p+1]]++; else odd[c[p+1]]++; st.insert(c[p+1]); } } ll ans=n; C.erase(C.find(cnt[i])); for(ll x:st){ ans=min(ans,n-cnt[i]-cnt[x]+min(odd[x],even[x])); C.erase(C.find(cnt[x])); } if(!C.empty()){ ans=min(ans,n-cnt[i]-*C.begin()); } ans=min(ans,n-cnt[i]); cout<<ans<<'\n'; for(ll x:st){ odd[x]=0; even[x]=0; C.insert(cnt[x]); } C.insert(cnt[i]); } }
#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...