133552025-01-07 16:59:21CzDaniBenzinkút üzemeltetés (55)cpp17Elfogadva 55/552ms548 KiB
#include <bits/stdc++.h>
using namespace std;

int main()
{
    int n, k;
    cin >> n >> k;
    vector<int> v(n+1), w(n+1), hol(n+1);
    for (int i = 1; i <= n; i++) {
        cin >> v[i] >> w[i];
    }
    vector<int> dp(n+1);
    for (int i = 1; i <= n; i++) {
        dp[i]=dp[i-1];
        hol[i]=i-1;
        if (w[i]>dp[i]) {
            hol[i]=0;
            dp[i]=w[i];
        }
        if (v[1]>v[i]-k)continue;
        int l = 1, r = n+1;
        while (l<r-1) {
            int mid = (r+l)/2;
            if (v[mid]<=v[i]-k)l=mid;
            else r=mid;
        }
        //dp[i]=max(dp[i], dp[l]+w[i]);
        if (dp[l]+w[i]>dp[i]) {
            hol[i]=l;
            dp[i]=dp[l]+w[i];
        }
    }
    cout << dp[n];/* << endl;
    for (int x : hol) {
        cout << x << ' ';
    }*/
    vector<int> ansv;
    int x = n;
    while (x != 0) {
        if (dp[x]>dp[hol[x]])ansv.push_back(x);
        x=hol[x];
    }
    reverse(ansv.begin(), ansv.end());
    cout<<endl<<ansv.size();
    for (int y : ansv)cout<<' '<<y;
    return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base55/55
1Elfogadva0/01ms508 KiB
2Elfogadva0/02ms316 KiB
3Elfogadva3/31ms316 KiB
4Elfogadva3/31ms316 KiB
5Elfogadva3/31ms316 KiB
6Elfogadva3/31ms548 KiB
7Elfogadva3/31ms316 KiB
8Elfogadva3/31ms316 KiB
9Elfogadva3/31ms316 KiB
10Elfogadva3/31ms316 KiB
11Elfogadva3/31ms500 KiB
12Elfogadva3/31ms328 KiB
13Elfogadva4/41ms316 KiB
14Elfogadva4/41ms316 KiB
15Elfogadva5/51ms316 KiB
16Elfogadva6/61ms316 KiB
17Elfogadva6/61ms316 KiB