Submission #1180436

#TimeUsernameProblemLanguageResultExecution timeMemory
1180436Szymon_PilipczukRope (JOI17_rope)C++20
80 / 100
2293 ms277432 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define st first #define nd second #define all(a) a.begin(),a.end() int main() { int n,m; cin>>n>>m; int c[n]; vector<int> am(m); map<pair<int,int>,int> e; map<pair<int,int>,int> e2; for(int i =0 ;i<n;i++) { cin>>c[i]; c[i]--; am[c[i]]++; } if(m == 1) { cout<<0<<"\n"; return 0; } vector<pair<int,int>> w; for(int i = 0;i<m;i++) { w.push_back({am[i],i}); } sort(all(w)); reverse(all(w)); for(int i = 0;i<n;i++) { if(i < n-1) { if(c[i+1] != c[i]) { if(i%2 == 0) { e[{c[i],c[i+1]}]++; e[{c[i+1],c[i]}]++; } else { e2[{c[i],c[i+1]}]++; e2[{c[i+1],c[i]}]++; } } } } for(int i = 0;i<m;i++) { for(int j = 0;j<m;j++) { if(e.find({i,w[j].nd}) == e.end() && w[j].nd != i) { e[{i,w[j].nd}] = 0; break; } } } for(int i = 0;i<m;i++) { for(int j = 0;j<m;j++) { if(e2.find({i,w[j].nd}) == e2.end() && w[j].nd != i) { e2[{i,w[j].nd}] = 0; break; } } } int i = 0; vector<int> tans(m,1e9); int ans = 1e9; for(auto [key,value] : e) { while(key.st != i) { tans[i] = ans; ans = 1e9; i++; } ans = min(ans,n-am[i]-am[key.nd]+value); } tans[i] = min(tans[i],ans); ans = 1e9; i = 0; for(auto [key,value] : e2) { while(key.st != i) { tans[i] = min(tans[i],ans); ans = 1e9; i++; } ans = min(ans,n-am[i]-am[key.nd]+value); } tans[i] =min(tans[i],ans); for(int i =0 ;i<m;i++) { cout<<tans[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...