#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;
a[0] = {0,0,0};
for(int i = 1;i < a.size();i++)
{
dp[i] = -1;
for(int j = 0;j < i ;j++)
{
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(a[i].x >= h && dp[i] != -1)return true;
}
return false;
}
void solve(){
int l = 1, r = h;
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(){
cin >> n >> h;
a.resize(n+1);
for(int i = 1;i<=n;i++)
cin >> a[i].x >> a[i].f >> a[i].r;
a.push_back({h,0,inf});
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... |