Submission #227654

#TimeUsernameProblemLanguageResultExecution timeMemory
227654stefdascaPalembang Bridges (APIO15_bridge)C++14
100 / 100
107 ms4080 KiB
#include<bits/stdc++.h>
#define god dimasi5eks
#pragma GCC optimize("O3")
#define fi first
#define se second
#define pb push_back
#define pf push_front

using namespace std;

typedef long long ll;

const int mod = 1000000007;
const double dancila = 3.14159265359; // PI 
const double eps = 1e-9;

bool cmp(pair<int, int> a, pair<int, int> b) 
{ 
	return a.fi + a.se < b.fi + b.se; 
}

priority_queue<int> lpq;
priority_queue<int, vector<int>, greater<int>> rpq;
ll lsum, rsum, ansa;
ll ps[100001];

void add(int x) 
{
    int median = (lpq.size() ? lpq.top() : 1000000001);
    if(x <= median) 
    {
	    lpq.push(x);
	    lsum += x;
    } 
    else 
    {
	    rpq.push(x);
	    rsum += x;
    }
    if(rpq.size() + 1 < lpq.size()) 
    {
	    int nxt = lpq.top();
	    lpq.pop();
	    rpq.push(nxt);
	    lsum -= nxt;
	    rsum += nxt;
    } 
    else 
	if(lpq.size() < rpq.size()) 
	{
		int nxt = rpq.top();
		rpq.pop();
		lpq.push(nxt);
		rsum -= nxt;
		lsum += nxt;
	}
}

int main()
{
    	ios_base::sync_with_stdio(false);
    	cin.tie(NULL);

	int k, n;
	vector<pair<int, int>> v = {{0, 0}};
	cin >> k >> n;
	for(int i = 0; i < n; ++i)
	{
		char a, b;
		int x, y;
		cin >> a >> x >> b >> y;
		if(a == b) 
			ansa += abs(x - y);
		else 
			v.push_back({x, y});
	}
	sort(v.begin(), v.end(), cmp);
	n = v.size() - 1;
	ansa += n;
	lsum = rsum = 0; 
	for(int i = 1; i <= n; ++i)
	{
		add(v[i].fi);
		add(v[i].se);
		ps[i] = rsum - lsum;
	}
	ll ansb = ps[n];
	if(k == 2)
	{
		while(lpq.size()) 
			lpq.pop();
		while(rpq.size()) 
			rpq.pop();
		lsum = rsum = 0;
		for(int i = n; i >= 1; i--) 
		{
			add(v[i].fi);
			add(v[i].se);
			ansb = min(ansb, rsum - lsum + ps[i - 1]);
		}
   	}
    	cout << ansa + ansb;
    	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...