Submission #93777

#TimeUsernameProblemLanguageResultExecution timeMemory
93777silxikysArt Exhibition (JOI18_art)C++14
100 / 100
214 ms20984 KiB
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

const int maxn = 5e5+5;
int N;
pair<ll,ll> a[maxn];

ll f(int l, int r) {
	if (l > r) return 0;
	if (l == r) {
		return a[l].second;
	}	
	int m = (l+r)/2;
	//get max of arrays that go thru mid
	ll lmax = 0, lcurr = 0;
	for (int i = m; i >= l; i--) {
		lcurr += a[i].second;
		lmax = max(lmax,lcurr-(a[m].first-a[i].first));
	}
	ll rmax = 0, rcurr = 0;
	for (int i = m + 1; i <= r; i++) {
		rcurr += a[i].second;
		rmax = max(rmax,rcurr-(a[i].first-a[m].first));
	}
	return max(lmax+rmax,max(f(l,m),f(m+1,r)));
}

int main()
{
    ios_base::sync_with_stdio(false); cin.tie(NULL);
    cin >> N;
    for (int i = 0; i < N; i++) {
    	cin >> a[i].first >> a[i].second;
    }
    sort(a,a+N);
    ll ans = f(0,N-1);
    cout << ans << '\n';

    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...