Submission #851882

#TimeUsernameProblemLanguageResultExecution timeMemory
851882KavelmydexPalembang Bridges (APIO15_bridge)C++17
100 / 100
119 ms6592 KiB
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef vector <int> vi;
typedef pair <ll,ll> pi;
#define pb push_back
#define f first
#define s second
#define OO 1e9
#define all(x) (x).begin(), (x).end()
 
bool cmp(const pi &a,const pi &b){
    return a.f + a.s < b.f + b.s;
}
priority_queue <int> pl;
priority_queue <int, vi, greater<int>> pr;
ll pref[100001], lsum, rsum;
void in(int x){
    int median = pl.size() ? pl.top() : 1000000001;
    if(x <= median){
        pl.push(x);
        lsum += x;
    }else{
        pr.push(x); rsum += x;
    }
    if(pl.size() > pr.size() + 1){
        int nxt = pl.top();
        pl.pop(); lsum -= nxt;
        pr.push(nxt); rsum += nxt;
    }else if(pr.size() > pl.size()){
        int nxt = pr.top();
        pr.pop(); rsum -= nxt;
        pl.push(nxt); lsum += nxt;
    }
}

int main() {
    // ios::sync_with_stdio(0); cin.tie(0);
    // freopen("art2.in", "r", stdin);
    // freopen("art2.out", "w", stdout);    
    int k,n; cin>>k>>n;
    vector <pi> v{{0, 0}};
    ll same_side = 0;
    for(int i=0; i<n; ++i){
        char a, b;
        int x, y; 
        cin >> a >> x >> b >> y;
        if(a == b) same_side += abs(x-y);
        else v.pb({x, y});
    }
    sort(all(v), cmp);
    n = v.size()-1;
    same_side += n;
    for(int i=1; i<=n; ++i){
        in(v[i].f);
        in(v[i].s);
        pref[i] = rsum-lsum;
    }
    ll ans = pref[n];
    if(k == 2){
        while(pl.size()) pl.pop();
        while(pr.size()) pr.pop();
        rsum = 0; lsum = 0;
        for(int i=n; i>=1; --i){
            in(v[i].f);
            in(v[i].s);
            ans = min(ans, pref[i-1] + rsum-lsum);
        }
    }
    cout << ans+same_side;
    return 0;
}
#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...