Submission #1200925

#TimeUsernameProblemLanguageResultExecution timeMemory
1200925PlayVoltzPalembang Bridges (APIO15_bridge)C++20
100 / 100
193 ms12160 KiB
#include <cstdio>
#include <stdio.h>
#include <stdbool.h>
#include <iostream>
#include <map>
#include <vector>
#include <climits>
#include <stack>
#include <string>
#include <queue>
#include <algorithm>
#include <set>
#include <unordered_set>
#include <unordered_map>
#include <cmath>
#include <cctype>
#include <bitset>
#include <iomanip>
#include <cstring>
#include <numeric>
#include <cassert>
#include <random>
#include <fstream>
using namespace std;

#define int long long
#define pii pair<int, int>
#define mp make_pair
#define pb push_back
#define fi first
#define se second

int tsum=0, bsum=0;
multiset<int> top, down;

bool custom(pii a, pii b){
	return a.fi+a.se<b.fi+b.se;
}

void add(int a){
	if (down.empty()||*(--down.end())>=a)down.insert(a), bsum+=a;
	else top.insert(a), tsum+=a;
	while (top.size()>=down.size())tsum-=*top.begin(), bsum+=*top.begin(), down.insert(*top.begin()), top.erase(top.begin());
	while (top.size()+1<down.size())bsum-=*(--down.end()), tsum+=*(--down.end()), top.insert(*(--down.end())), down.erase((--down.end()));
}

int32_t main(){
	int k, n, ans=0;
	cin>>k>>n;
	vector<pii> vect;
	for (int i=0, a, b; i<n; ++i){
		char c, d;
		cin>>c>>a>>d>>b;
		if (c==d)ans+=abs(a-b);
		else vect.pb(mp(a, b)), ++ans;
	}
	if (vect.empty()){
		cout<<ans;
		return 0;
	}
	sort(vect.begin(), vect.end(), custom);
	vector<int> pm(vect.size());
	for (int i=0; i<vect.size(); ++i)add(vect[i].fi), add(vect[i].se), pm[i]=tsum-bsum;
	if (k==1){
		cout<<ans+pm[vect.size()-1];
		return 0;
	}
	top.clear();
	down.clear();
	tsum=bsum=0;
	int mn=pm[vect.size()-1];
	for (int i=vect.size()-1; i>=1; --i)add(vect[i].fi), add(vect[i].se), mn=min(mn, pm[i-1]+tsum-bsum);
	cout<<ans+mn;
}
#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...