제출 #384565

#제출 시각아이디문제언어결과실행 시간메모리
384565ritul_kr_singhDivide and conquer (IZhO14_divide)C++17
100 / 100
38 ms3436 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define sp << ' ' <<
#define nl << '\n'

signed main(){
	cin.tie(0)->sync_with_stdio(0);

	int n, ans = 0; cin >> n;
	vector<int> a(n+1), b(n+1), c(n+1), d(n+1);
	for(int i=1; i<=n; ++i){
		cin >> c[i] >> b[i] >> a[i];
		ans = max(ans, b[i]);
		a[i] += a[i-1];
		b[i] += b[i-1];
	}
	for(int i=0; i<n; ++i) a[i] -= c[i+1];
	for(int i=0; i<=n; ++i) d[i] = a[i];
	for(int i=1; i<=n; ++i) d[i] = min(d[i], d[i-1]);

	for(int i=1; i<=n; ++i){
		int sub = (i < n ?  c[i+1] : 0LL);
		int low = 0, high = i;
		while(low<high){
			int mid = (low+high)/2;
			if(d[mid] <= a[i] + sub - c[i]) high = mid;
			else low = mid+1;
		}
		ans = max(ans, b[i] - b[low]);
	}
	cout << ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...