Submission #441378

#TimeUsernameProblemLanguageResultExecution timeMemory
441378KarliverPalembang Bridges (APIO15_bridge)C++14
100 / 100
102 ms5736 KiB
	
 #include <bits/stdc++.h>
 
 #define FIXED_FLOAT(x)  std::fixed <<std::setprecision(20) << (x)
 #define all(v) (v).begin(), (v).end()
 using namespace  std;
 #define forn(i,n) for (int i = 0; i < (n); ++i)
 #define rforn(i, n) for(int i = (n) - 1;i >= 0;--i)
 using ll = long long;
 int mod = (ll)1e9 + 7;
 #define PI acos(-1)
 typedef pair<int, int> pairs;
 
 const int INF = 1e9 + 1;
 const int N = 2e5 + 100;
 const double eps = 1e-7;
 
 template <class T> using V = vector<T>;  
 template <class T> using VV = V<V<T>>;  
 
 template <typename XPAX>
 void ckma(XPAX &x, XPAX y) {
     x = (x < y ? y : x);
 }
 template <typename XPAX>
 void ckmi(XPAX &x, XPAX y) {
     x = (x > y ? y : x);
 }
 void __print(int x) {cerr << x;}
 void __print(long x) {cerr << x;}
 void __print(long long x) {cerr << x;}
 void __print(unsigned x) {cerr << x;}
 void __print(unsigned long x) {cerr << x;}
 void __print(unsigned long long x) {cerr << x;}
 void __print(float x) {cerr << x;}
 void __print(double x) {cerr << x;}
 void __print(long double x) {cerr << x;}
 void __print(char x) {cerr << '\'' << x << '\'';}
 void __print(const char *x) {cerr << '\"' << x << '\"';}
 void __print(const string &x) {cerr << '\"' << x << '\"';}
 void __print(bool x) {cerr << (x ? "true" : "false");}
 
 template<typename T, typename V>
 void __print(const pair<T, V> &x) {cerr << '{'; __print(x.first); cerr << ','; __print(x.second); cerr << '}';}
 template<typename T>
 void __print(const T &x) {int f = 0; cerr << '{'; for (auto &i: x) cerr << (f++ ? "," : ""), __print(i); cerr << "}";}
 void _print() {cerr << "]\n";}
 template <typename T, typename... V>
 void _print(T t, V... v) {__print(t); if (sizeof...(v)) cerr << ", "; _print(v...);}
 #define debug(x...) cerr << "[" << #x << "] = ["; _print(x)
 priority_queue<int> lf;
 priority_queue<int, V<int>, greater<int>> rf;
 ll lsum, rsum;
 void ins(int x) {
 	int med = (lf.size() ? lf.top() : INF);
 	if(x <= med) {
 		lf.push(x);
 		lsum += x;
 	}
 	else {
 		rf.push(x);
 		rsum += x;
 	}

 	if(rf.size() + 1 < lf.size()) {
 		int ns = lf.top();
        lf.pop();
        lsum -= ns;
        rsum += ns;
        rf.push(ns);
    }

    if(lf.size() < rf.size()) {
        int ns = rf.top();
        rf.pop();
        rsum -= ns;
        lsum += ns;
        lf.push(ns);
    }
}
 void solve() {
 
 
 	int n, k;
 	cin >> k >> n;

    V<pairs> ps{{0, 0}};

    auto cmp = [&](pairs a, pairs b) {
        return a.first + a.second < b.first + b.second;
    };

    ll same = 0;
    forn(i, n) {
        char a, b;
        int x,  y;
        cin >> a >> x >> b >> y;

        if(a == b)same += abs(x - y);
        else 
            ps.push_back({x, y});
    }

    sort(all(ps), cmp);

    n = ps.size() - 1;

    same += n;


    V<ll> pr(n + 1, 0);
    lsum = rsum = 0;
    for(int i = 1;i <= n;++i) {
        ins(ps[i].first);
        ins(ps[i].second);

        pr[i] = rsum - lsum;
    }

    ll ans = pr[n];

    if(k == 2) {
        while(lf.size())lf.pop();

        while(rf.size())rf.pop();
        lsum = rsum = 0;
        for(int i = n;i;--i) {
            ins(ps[i].first);
            ins(ps[i].second);
            ckmi(ans, pr[i - 1] + rsum - lsum);
        }
    }

    cout << ans + same << '\n';

 }
 void test_case() {
     int t;
     cin >> t;
     forn(p, t) {
 
         //cout << "Case #" << p + 1 << ": ";
         solve();
     }
 }
 int main() {
 
     ios::sync_with_stdio(false);
     cin.tie(0);
 
     solve();
 
 }
  
#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...