211802026-01-12 16:45:02algoproBenzinkút üzemeltetés (55)cpp17Accepted 55/552ms500 KiB
// UUID: 595c6f76-6f81-4a25-9e6e-366e843c9e07
#include <bits/stdc++.h>
using namespace std;

int main() {
    int N, K;
    cin >> N >> K;

    vector<long long> T(N + 1), H(N + 1);
    for (int i = 1; i <= N; i++) {
        cin >> T[i] >> H[i];
    }
    vector<long long> dp(N + 1, 0);
    vector<int> prev(N + 1, -1);
    vector<bool> take(N + 1, false);
    for (int i = 1; i <= N; i++) {
        dp[i] = dp[i - 1];
        int lo = 1, hi = i - 1, best = 0;
        while (lo <= hi) {
            int mid = (lo + hi) / 2;
            if (T[i] - T[mid] >= K) {
                best = mid;
                lo = mid + 1;
            } else {
                hi = mid - 1;
            }
        }
        long long candidate = dp[best] + H[i];
        if (candidate > dp[i]) {
            dp[i] = candidate;
            take[i] = true;
            prev[i] = best;
        }
    }
    vector<int> chosen;
    int i = N;
    while (i > 0) {
        if (take[i]) {
            chosen.push_back(i);
            i = prev[i];
        } else {
            i--;
        }
    }
    reverse(chosen.begin(), chosen.end());
    cout << dp[N] << "\n";
    cout << chosen.size();
    for (int idx : chosen) {
        cout << " " << idx;
    }
    cout << "\n";

    return 0;
}
SubtaskSumTestVerdictTimeMemory
base55/55
1Accepted0/01ms316 KiB
2Accepted0/02ms500 KiB
3Accepted3/31ms316 KiB
4Accepted3/31ms500 KiB
5Accepted3/31ms316 KiB
6Accepted3/31ms316 KiB
7Accepted3/31ms316 KiB
8Accepted3/31ms316 KiB
9Accepted3/31ms316 KiB
10Accepted3/31ms316 KiB
11Accepted3/31ms316 KiB
12Accepted3/31ms316 KiB
13Accepted4/41ms316 KiB
14Accepted4/41ms316 KiB
15Accepted5/51ms316 KiB
16Accepted6/61ms316 KiB
17Accepted6/61ms412 KiB