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;
typedef long long ll;
typedef pair<int, int> pp;
#define rep(i,l,r) for(int i = (l); i < r; i++)
#define per(i,r,l) for(int i = (r); i >= l; i--)
#define all(x) x.begin(), x.end()
#define sz(x) (int)(x).size()
#define pb push_back
#define ff first
#define ss second
// #include <ext/pb_ds/assoc_container.hpp>
// using namespace __gnu_pbds;
// template <class T> using Tree = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
const ll mod = 1e9 + 7, maxn = 3e5 + 5, inf = 1e9 + 5;
struct Box{
multiset<int> low, up;
ll sup, slow;
Box(){
sup = slow = 0;
}
void upd(){
if(sz(low) > sz(up) + 1){
int t = *prev(low.end());
slow -= t, sup += t;
up.insert(t);
low.erase(prev(low.end()));
}
if(sz(up) > sz(low)){
int t = *up.begin();
slow += t, sup -= t;
low.insert(t);
up.erase(up.begin());
}
}
void insert(int x){
if(sz(up) && x >= *up.begin()){
up.insert(x);
sup += x;
}else{
low.insert(x);
slow += x;
}
upd();
}
void erase(int x){
if(sz(up) && x >= *up.begin()){
up.erase(up.find(x));
sup -= x;
}else{
low.erase(low.find(x));
slow -= x;
}
upd();
}
ll get(){
if(!sz(low)) return 0;
ll md = *prev(low.end());
return md*(sz(low) - sz(up)) - slow + sup;
}
};
int main(){
cin.tie(0) -> sync_with_stdio(0);
int k , n; cin >> k >> n;
ll ans = 0;
vector<pp> v;
rep(i,0,n){
char h, w;
int s, e; cin >> h >> s >> w >> e;
if(h == w){
ans += abs(s - e);
}else{
ans++;
v.pb({s, e});
}
}
sort(all(v), [&](pp a, pp b){
return a.ff + a.ss < b.ff + b.ss;
});
Box l, r;
for(pp c: v){
r.insert(c.ff);
r.insert(c.ss);
}
if(k == 1){
ans += r.get();
}else{
ll k = r.get();
for(pp c: v){
l.insert(c.ff);
l.insert(c.ss);
r.erase(c.ff);
r.erase(c.ss);
k = min(k, l.get() + r.get());
}
ans += k;
}
cout << ans;
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... |