Submission #1291325

#TimeUsernameProblemLanguageResultExecution timeMemory
1291325samarthkulkarniFuel Station (NOI20_fuelstation)C++20
13 / 100
103 ms7452 KiB
#include <bits/stdc++.h>
using namespace std;

#define ll long long
#define vi vector<long long>
#define all(x) x.begin(), x.end()
#define endl "\n"

void solution();
int main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    solution();
    return 0;
}


const int MAXN = 3e5+10;
struct point {
	ll X, A, B;

	bool operator<(point temp) {
		if (X == temp.X) return B < temp.B;
		return X < temp.X;
	}
};

point a[MAXN];


void solution() {
	ll n, d; cin >> n >> d;

	for (int i = 0; i < n; i++) {
		cin >> a[i].X >> a[i].A >> a[i].B; 
	}

	sort(a, a+n);


	auto isValid = [&](ll F) {
		ll curr = F;
		ll p = 0;
		for (int i = 0; i < n; i++) {
			if (a[i].X - p <= curr) {
				curr -= (a[i].X - p);
				p = a[i].X;

				if (F <= a[i].B) {
					curr += a[i].A;
				}
			} else {
				return false;
			}
		}


		return d-p <= curr;
	};	




	ll p = 0, q = d;

	ll ans = d;
	while (p <= q) {
		ll mid = (p + q)/2;
		if (isValid(mid)) {
			ans = mid;	
			q = mid-1;
		} else p = mid+1;
	}

	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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...