Submission #172675

#TimeUsernameProblemLanguageResultExecution timeMemory
172675tselmegkhDivide and conquer (IZhO14_divide)C++14
0 / 100
1076 ms2652 KiB
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5;

int x[N], g[N], d[N];
int main(){
	int n;
	cin >> n;

	long long curenergy = 0, curgold = 0;
	for(int i = 1; i <= n; i++){
		cin >> x[i] >> g[i] >> d[i];
		curgold += g[i];
		curenergy += d[i];	
	}
	int l = 1, r = n;

	while(x[r] - x[l] > curenergy){
		if(r - l == 1){
			if(g[r] > g[l]){
				curgold -= g[l];
				curenergy -= d[l];
				l++;
			}else{
				curgold -= g[r];
				curenergy -= d[r];
				r--;
			}
		}else{
			if(curenergy - d[l] >= x[r] - x[l + 1] && curenergy - d[r] >= x[r - 1] - x[l]){
				if(g[r] > g[l]){
					curgold -= g[l];
					curenergy -= d[l];
					l++;
				}else{
					curgold -= g[r];
					curenergy -= d[r];
					r--;
				}
			}else if(curenergy - d[l] >= x[r] - x[l + 1]){
				curgold -= g[l];
				curenergy -= d[l];
				l++;
			}else if(curenergy - d[r] >= x[r - 1] - x[l]){
				curgold -= g[r];
				curenergy -= d[r];
				r--;
			}
		}
	}
	cout << curgold << '\n';
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...