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>
#define int long long
#define fi first
#define se second
using namespace std;
const int inff = 1e18;
int32_t main()
{
        ios_base::sync_with_stdio(false);
        cin.tie(NULL);
        
        int k, n;
        cin >> k >> n;
        int ans = 0;
        vector<int> a, b;
        for (int i = 0; i < n; i++) {
                char p, q;
                int s, t;
                cin >> p >> s >> q >> t;
                if (p == q) {
                        ans += abs(s - t);
                } else {
                        if (s > t) swap(s, t);
                        a.push_back(s);
                        b.push_back(t);
                }
        }
        if (k == 1) {
                int m = (int)a.size();
                vector<int> c;
                for (int i = 0; i < m; i++) {
                        c.push_back(a[i]);
                        c.push_back(b[i]);
                }
                sort(c.begin(), c.end());
                
                ans += m;
                for (int i = 0; i < 2 * m; i++) {
                        ans += abs(c[i] - c[m]);
                }
                cout << ans << '\n';
        } else if (k == 2) {
                int m = (int)a.size();
                vector<pair<int, int>> c;
                for (int i = 0; i < m; i++) {
                        c.push_back({a[i], b[i]});
                }
                sort(c.begin(), c.end());
                int sl = 0, sr = 0;
                vector<int> pref(m);
                priority_queue<int> le;
                priority_queue<int, vector<int>, greater<int>> ri;
                for (int i = 0; i < m; i++) {
                        auto [a, b] = c[i];
                        sl += a;
                        le.push(a);
                        sr += b;
                        ri.push(b);
                        while (le.top() > ri.top()) {
                                int x = le.top(), y = ri.top();
                                sr += x;
                                ri.push(x);
                                sl += y;
                                le.push(y);
                                sr -= y;
                                ri.pop();
                                sl -= x;
                                le.pop();
                        }
                        pref[i] = ((i + 1) * le.top() - sl) + (sr - (i + 1) * le.top());
                }
                sl = sr = 0;
                while (!le.empty()) le.pop();
                while (!ri.empty()) ri.pop();
                vector<int> suf(m);
                for (int i = m - 1; i >= 0; i--) {
                        auto [a, b] = c[i];
                        sl += a;
                        le.push(a);
                        sr += b;
                        ri.push(b);
                        while (le.top() > ri.top()) {
                                int x = le.top(), y = ri.top();
                                sr += x;
                                ri.push(x);
                                sl += y;
                                le.push(y);
                                sr -= y;
                                ri.pop();
                                sl -= x;
                                le.pop();
                        }
                        suf[i] = ((m - i) * le.top() - sl) + (sr - (m - i) * le.top());
                }
                int mn = inff;
                ans += m;
                for (int i = 0; i < m - 1; i++) mn = min(mn, pref[i] + suf[i + 1]);
                if (m == 0) mn = 0;     
                ans += mn;
                cout << ans << '\n';
        }
        
        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... |