Submission #78534

#TimeUsernameProblemLanguageResultExecution timeMemory
78534OrigimsArt Exhibition (JOI18_art)C++14
100 / 100
257 ms222916 KiB
// In The Name Of God
#include <bits/stdc++.h>

#define sqr(A) ((A) * (A))
#define F first
#define S second
#define MP make_pair
#define bsz  __builtin_popcount
#define all(A) A.begin(), A.end()
using namespace std;
typedef long long ll;
typedef long double ld;
typedef pair<ll, ll> pii;
const int MOD = 1e9 + 7;
const int MOD2 = 1e9 + 9;
const int PR = 727;
const int INF = INT_MAX;
const ll LINF = LLONG_MAX;

const int N = 5e5 + 20;
pii a[N];
ll n, ans;

void solve(int l, int r) {
	if (r - l < 2) {
		ans = max(ans, a[l].S);
		return ;
	}
	int mid = (l + r) / 2;
	solve(l, mid);
	solve(mid, r);
	ll sum = 0, res = 0;
	for (int i = mid - 1; i >= l; i--) {
		sum += a[i].S;
		res = max(res, sum - (a[mid].F - a[i].F));
	}
	sum = 0;
	for (int i = mid; i < r; i++) {
		sum += a[i].S;
		ans = max(ans, sum - (a[i].F - a[mid].F) + res);
	}
}

int main() {
	ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
	cin >> n;
	for (int i = 0; i < n; i++)
		cin >> a[i].F >> a[i].S;
	sort(a, a + n);
	solve(0, n);
	cout << ans << endl;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...