제출 #229349

#제출 시각아이디문제언어결과실행 시간메모리
229349AM1648Palembang Bridges (APIO15_bridge)C++17
100 / 100
86 ms10788 KiB
/* be name khoda */

#define long_enable
#include <iostream>
#include <algorithm>
#include <cstring>
#include <numeric>
#include <vector>
#include <fstream>
#include <queue>
#include <map>
using namespace std;

#ifdef long_enable
typedef long long int ll;
#else
typedef int ll;
#endif

typedef pair<ll, ll> pii;
typedef pair<pii, ll> ppi;
typedef pair<ll, pii> pip;
typedef vector<ll> vi;
typedef vector<pii> vpii;

#define forifrom(i, s, n) for (ll i = s; i < n; ++i)
#define forirto(i, n, e) for (ll i = (n) - 1; i >= e; --i)
#define fori(i, n) forifrom (i, 0, n)
#define forir(i, n) forirto (i, n, 0)

#define F first
#define S second
#define pb push_back
#define eb emplace_back
#define all(x) (x).begin(), (x).end()
#define smin(a, b) a = min(a, (b))
#define smax(a, b) a = max(a, (b))

#define debug(x) cout << #x << " -> " << (x) << endl
#define debug2(x, y) cout << #x << ' ' << #y << " -> " << (x) << ' ' << (y) << endl
#define debug3(x, y, z) cout << #x << ' ' << #y << ' ' << #z << " -> " << (x) << ' ' << (y) << ' ' << (z) << endl
#define debug4(x, y, z, t) cout << #x << ' ' << #y << ' ' << #z << ' ' << #t << " -> " << (x) << ' ' << (y) << ' ' << (z) << ' ' << (t) << endl
#define debugp(x) cout << #x << " -> " << "(" << (x).F << ", " << (x).S << ")" << endl
#define debuga(x, n) cout << #x << " -> "; fori (i1_da, n) { cout << (x)[i1_da] << ' '; } cout << endl
#define debugap(x, n) cout << #x << " ->\n"; fori (i1_dap, n) { cout << "(" << (x)[i1_dap].F << ", " << (x)[i1_dap].S << ")\n"; } cout << endl
#define debugaa(x, n, m) cout << #x << " ->\n"; fori (i1_daa, n) { fori (i2_daa, m) { cout << (x)[i1_daa][i2_daa] << ' '; } cout << '\n'; } cout << endl
#define debugav(x, n) cout << #x << " ->\n"; fori (i1_dav, n) { fori (i2_dav, (x)[i1_dav].size()) { cout << (x)[i1_dav][i2_dav] << ' '; } cout << '\n'; } cout << endl
#define debugia(x, n) cout << #x << " ->\n"; fori (i1_dia, n) { cout << i1_dia << " : " << (x)[i1_dia] << '\n'; } cout << endl

const ll MOD = 1000000007;
const ll INF = 2000000000;
const long long BIG = 1446803456761533460LL;

#define Add(a, b) a = ((a) + (b)) % MOD
#define Mul(a, b) a = (1LL * (a) * (b)) % MOD

// -----------------------------------------------------------------------

const ll maxn = 100010;
const ll maxnlg = 20;

ll K, N, n;
pip pts[maxn];
ll lt[maxn], rt[maxn];

struct MedianCost {
    priority_queue<ll> maxheap;
    priority_queue<ll, vi, greater<ll>> minheap;
    ll sum = 0;
    void add(ll x) {
        if (maxheap.empty() || x < maxheap.top()) {
            if (!maxheap.empty()) sum += maxheap.top() - x;
            maxheap.push(x);
            if ((ll) maxheap.size() - (ll) minheap.size() > 1) {
                ll y = maxheap.top(); maxheap.pop();
                minheap.push(y);
            }
        } else {
            sum += x - maxheap.top();
            minheap.push(x);
            if ((ll) minheap.size() - (ll) maxheap.size() >= 1) {
                ll y = minheap.top(); minheap.pop();
                sum -= y - maxheap.top();
                maxheap.push(y);
            }
        }
    }
    ll cost() {
        return sum;
    }
} ltcost, rtcost;

int main() {
    ios_base::sync_with_stdio(false), cin.tie(0), cout.tie(0);

    cin >> K >> N;
    ll same = 0;
    fori (i, N) {
        char a, b; ll x, y; cin >> a >> x >> b >> y;
        if (a == b) {
            same += abs(x - y);
        } else {
            pts[n++] = {x + y, {x, y}};
        }
    }
    sort(pts, pts + n);
    fori (i, n) {
        ltcost.add(pts[i].S.F);
        ltcost.add(pts[i].S.S);
        lt[i] = ltcost.cost();
    }
    forir (i, n) {
        rtcost.add(pts[i].S.F);
        rtcost.add(pts[i].S.S);
        rt[i] = rtcost.cost();
    }
    ll ans = lt[n - 1];
    if (K == 2) {
        fori (i, n - 1) {
            smin(ans, lt[i] + rt[i + 1]);
        }
    }
    cout << ans + same + n << '\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...