Submission #952689

#TimeUsernameProblemLanguageResultExecution timeMemory
952689Mohamed_Kachef06Fuel Station (NOI20_fuelstation)C++17
54 / 100
3087 ms30420 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long 



void doWork(){
    int n , d;
    cin >> n >> d;
    vector<array<int , 3>> v(n+1); 
    vector<array<int , 3>> u(n); 
    int arr[n+1] = {};
    // arr[i] = cost to go from i to i+1

    for (int i=  1 ; i <= n ; i++){
        for (int j = 0 ; j < 3 ; j++){
            cin >> v[i][j]; 
        }
    }
    v.push_back({d , 0 , 0});
    sort(v.begin() , v.end());

    for (int i = 1 ; i <= n ; i++){
        u[i-1] = {v[i][2] , v[i][1] , i}; 
    }
    u.push_back({(int)1e18 , 0 , 0});
    sort(u.begin() , u.end() , greater<>());

    for (int i = 0 ; i <= n ; i++){
        arr[i] = v[i+1][0] - v[i][0]; 
    }
    
    int ans = 1e18;
    int id = 0;
    for (int i = 0 ; i <= n ; i++){
        while (id <= n && u[id][0] >= u[i][0]) { arr[u[id][2]]-=u[id][1]; id++;}
        int mx = 0 , sum = 0;
        for (int j = 0 ; j <= n ; j++) {
            //cout << arr[j] << ' ' ;
            sum += arr[j]; 
            mx = max(mx , sum);
        }
        // cout << mx << ' ' << u[i][0] << '\n';
        // cout << '\n';
        if (mx <= u[i][0]) ans = min(ans , mx);
    }
    cout << ans; 
}

signed main(){
    ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    doWork(); 
}
#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...