Submission #733634

# Submission time Handle Problem Language Result Execution time Memory
733634 2023-05-01T05:59:39 Z SanguineChameleon Palembang Bridges (APIO15_bridge) C++17
22 / 100
108 ms 9724 KB
#include <bits/stdc++.h>
using namespace std;

void just_do_it();

int main() {
	#ifdef KAMIRULEZ
		freopen("kamirulez.inp", "r", stdin);
		freopen("kamirulez.out", "w", stdout);
	#endif
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	just_do_it();
	return 0;
}

struct median {
	multiset<int> Sl;
	multiset<int> Sr;
	long long left_sum = 0;
	long long right_sum = 0;

	void clear() {
		Sl.clear();
		Sr.clear();
		left_sum = 0;
		right_sum = 0;
	}

	void insert(int x, int y) {
		if (Sr.empty() || x <= *Sr.begin()) {
			Sl.insert(x);
			left_sum += x;
		}
		else {
			Sr.insert(x);
			right_sum += x;
		}
		if (Sr.empty() || y <= *Sr.begin()) {
			Sl.insert(y);
			left_sum += y;
		}
		else {
			Sr.insert(y);
			right_sum += y;
		}
		if (Sl.size() > Sr.size()) {
			left_sum -= *Sl.rbegin();
			right_sum += *Sl.rbegin();
			Sr.insert(*Sl.rbegin());
			Sl.erase(prev(Sl.end()));
		}
		else if (Sl.size() < Sr.size()) {
			right_sum -= *Sr.begin();
			left_sum += *Sr.begin();
			Sl.insert(*Sr.begin());
			Sr.erase(Sr.begin());
		}
	}

	long long get() {
		return right_sum - left_sum;
	};

} med;

void just_do_it() {
	int K, N;
	cin >> K >> N;
	vector<pair<int, pair<int, int>>> A;
	long long add = 0;
	for (int i = 0; i < N; i++) {
		char P, Q;
		int S, T;
		cin >> P >> S >> Q >> T;
		if (P == Q) {
			add += abs(S - T);
		}
		else {
			add++;
			if (K == 1) {
				med.insert(S, T);
			}
			else {
				A.emplace_back(S + T, make_pair(S, T));
			}
		}
	}
	if (K == 1) {
		cout << med.get() + add;
		return;
	}
	int M = A.size();
	sort(A.begin(), A.end());
	vector<long long> pref(M);
	vector<long long> suf(M);
	for (int i = 0; i < M; i++) {
		int S = A[i].second.first;
		int T = A[i].second.second;
		med.insert(S, T);
		pref[i] = med.get();
	}
	med.clear();
	for (int i = M - 1; i >= 0; i--) {
		int S = A[i].second.first;
		int T = A[i].second.second;
		med.insert(S, T);
		suf[i] = med.get();
	}
	long long res = pref[M - 1];
	for (int i = 0; i < M - 1; i++) {
		res = min(res, pref[i] + suf[i + 1]);
	}
	res += add;
	cout << res;
}
# Verdict Execution time Memory Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 1 ms 340 KB Output is correct
4 Correct 1 ms 340 KB Output is correct
5 Correct 1 ms 340 KB Output is correct
6 Correct 1 ms 340 KB Output is correct
7 Correct 1 ms 340 KB Output is correct
8 Correct 1 ms 340 KB Output is correct
9 Correct 1 ms 340 KB Output is correct
10 Correct 1 ms 340 KB Output is correct
11 Correct 1 ms 340 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 1 ms 340 KB Output is correct
4 Correct 1 ms 340 KB Output is correct
5 Correct 1 ms 340 KB Output is correct
6 Correct 2 ms 340 KB Output is correct
7 Correct 1 ms 340 KB Output is correct
8 Correct 1 ms 340 KB Output is correct
9 Correct 1 ms 340 KB Output is correct
10 Correct 1 ms 340 KB Output is correct
11 Correct 1 ms 340 KB Output is correct
12 Correct 59 ms 9596 KB Output is correct
13 Correct 108 ms 9676 KB Output is correct
14 Correct 85 ms 8844 KB Output is correct
15 Correct 62 ms 5836 KB Output is correct
16 Correct 73 ms 9600 KB Output is correct
17 Correct 75 ms 9656 KB Output is correct
18 Correct 76 ms 9676 KB Output is correct
19 Correct 86 ms 9660 KB Output is correct
20 Correct 76 ms 9724 KB Output is correct
21 Correct 70 ms 9632 KB Output is correct
# Verdict Execution time Memory Grader output
1 Runtime error 1 ms 468 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 1 ms 340 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 1 ms 340 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -