Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <queue>
- using namespace std;
- typedef long long ll;
- int main() {
- ios_base::sync_with_stdio(false);
- int n;
- cin >> n;
- vector<ll> v(n);
- for(int i = 0; i < n; i++) {
- cin >> v[i];
- }
- int K = n / 3;
- vector<ll> max_left(n, 0);
- priority_queue<ll, vector<ll>, greater<ll>> pq;
- ll current_sum = 0;
- for(int i = 0; i < n; i++) {
- pq.push(v[i]);
- current_sum += v[i];
- if((int) pq.size() > K) {
- current_sum -= pq.top();
- pq.pop();
- }
- if((int) pq.size() == K) {
- max_left[i] = current_sum;
- }
- }
- vector<ll> min_right(n, 0);
- priority_queue<ll, vector<ll>, less<ll>> pq2;
- ll right_current_sum = 0;
- for(int i = n - 1; i >= 0; i--) {
- pq2.push(v[i]);
- right_current_sum += v[i];
- if((int) pq2.size() > K) {
- right_current_sum -= pq2.top();
- pq2.pop();
- }
- if((int) pq2.size() == K) {
- min_right[i] = right_current_sum;
- }
- }
- ll res = -1e18;
- for(int i = K - 1; i <= 2 * K - 1; i++) {
- ll A = max_left[i];
- ll B = min_right[i + 1];
- res = max(res, A - B);
- }
- cout << res << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment