Submission #772259

#TimeUsernameProblemLanguageResultExecution timeMemory
772259radoslav11Potatoes and fertilizers (LMIO19_bulves)C++17
100 / 100
402 ms15196 KiB
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;

int N;
ll fst = 0;                 // value of DP function at 0
priority_queue<ll> points;  // points where DP function changes slope

int main() {
	cin >> N;
	vector<ll> dif(N + 1);
	for (int i = 1; i <= N; ++i) {
		int a, b;
		cin >> a >> b;
		dif[i] = a - b + dif[i - 1];
	}
	assert(dif[N] >= 0);  // assume solution exists
	for (int i = 1; i < N; ++i) {
		if (dif[i] < 0) fst -= dif[i], dif[i] = 0;
		fst += dif[i];
		points.push(dif[i]);
		points.push(dif[i]);
		points.pop();
	}
	while (points.size()) {
		ll a = points.top();
		points.pop();
		fst -= min(a, dif[N]);
	}
	cout << fst << "\n";
}
#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...