이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include<bits/stdc++.h>
using namespace std;
#define pii pair<int,int>
const long long INF = 1e18;
void PlayGround() {
int k, n;
cin>>k>>n;
long long ans = 0;
vector<pair<int,int>>bag;
for(int i=0; i<n; ++i) {
char p, q;
int s, t;
cin>>p>>s>>q>>t;
if(s>t) swap(s, t);
if(p==q) {
ans += t - s;
} else {
bag.emplace_back(s, t);
}
}
int m = bag.size();
ans += m;
if(m==0) {
cout<<ans<<'\n';
return;
}
sort(bag.begin(), bag.end(), [&] (pii x, pii y) {
return x.first+x.second<y.first+y.second;
});
long long pre[m];
long long S1 = 0, S2 = 0;
multiset<int>m1, m2;
for(int i=0; i<m; ++i) {
m1.insert(bag[i].first), m2.insert(bag[i].second);
S1 += bag[i].first;
S2 += bag[i].second;
while(*prev(m1.end())>*m2.begin()) {
S1 -= *prev(m1.end());
S1 += *m2.begin();
S2 -= *m2.begin();
S2 += *prev(m1.end());
m2.insert(*prev(m1.end()));
m1.erase(prev(m1.end()));
m1.insert(*m2.begin());
m2.erase(m2.begin());
}
int med = *m2.begin();
pre[i] = med * (i+1) - S1 + S2 - med * (i+1);
}
long long best = INF;
S1 = S2 = 0;
m1.clear(), m2.clear();
for(int i=m-1; i>=0; --i) {
m1.insert(bag[i].first), m2.insert(bag[i].second);
S1 += bag[i].first;
S2 += bag[i].second;
while(*prev(m1.end())>*m2.begin()) {
S1 -= *prev(m1.end());
S1 += *m2.begin();
S2 -= *m2.begin();
S2 += *prev(m1.end());
m2.insert(*prev(m1.end()));
m1.erase(prev(m1.end()));
m1.insert(*m2.begin());
m2.erase(m2.begin());
}
long long med = *m2.begin();
long long cur = med * (m-i) - S1 + S2 - med * (m-i);
if(i) cur += pre[i-1];
best = min(best, cur);
}
ans += best;
cout<<ans<<'\n';
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
PlayGround();
return 0;
}
# | 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... |