#include <bits/stdc++.h>
using namespace std;
#define int long long
const int maxn = 1e6;
const int inf = 1e18;
int dp[maxn];
struct information{
int x,f,r;
bool operator <(const information a)const {
return x < a.x;
}
};
int n,h;
vector<information> a;
bool check(int x){
dp[0] = x;
for(int i = 1; i < a.size(); i++){
dp[i] = -1;
for(int j = 0; j < i; j++){
if(dp[j] < 0) continue;
int cost = dp[j] - (a[i].x - a[j].x);
if(cost >= 0){
dp[i] = max(dp[i], min(cost, a[i].r) + a[i].f);
}
}
if(dp[i] - h + a[i].x >= 0 && a[i].x <= h || a[i].x >= h)return true;
}
return false;
}
void solve(){
a[0] = {0,0,0};
int l = 0, r = inf;
int ans = 0;
while(l <= r){
int mid = (l+r)/2;
if(check(mid)) {
r = mid-1;
ans = mid;
}
else l = mid + 1;
}
cout << ans;
}
signed main(){
ios_base::sync_with_stdio(false);
cout.tie(nullptr);
cin.tie(nullptr);
cin >> n >> h;
a.resize(n+1);
for(int i = 1;i<=n;i++)
cin >> a[i].x >> a[i].f >> a[i].r;
sort(a.begin()+1,a.end());
solve();
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |