216102026-01-13 17:09:00algoproBenzinkút üzemeltetés (55)cpp17Accepted 55/552ms556 KiB
// UUID: 036e6dd4-6bd0-4c38-b38e-133712a33bc6
#include <bits/stdc++.h>
using namespace std;

int main() {
	//cout << "Hello world!\n";
	int n, k;
	cin>>n>>k;
	vector<pair<int,int>> v(n);
	for(int i = 0;i<n;i++) cin>>v[i].first>>v[i].second;

	vector<int> v2(n);
	for(int i = 0;i<n;i++){
		int l = 0, r=i-1,ans=-1;
		while(l<=r){
			int m = (l+r)/2;
			if(v[i].first - v[m].first >=k){
				ans = m;
				l = m+1;
			}else{
				r = m-1;
			}
		}
		v2[i] = ans;
	}

	vector<int> dp(n,0);
	vector<bool> v3(n,false);

	for(int i = 0;i<n;i++){
		int asd = (i>0 ? dp[i-1] : 0);
		int val = v[i].second + (v2[i] != -1 ? dp[v2[i]] : 0);

		if(val > asd){
			dp[i] = val;
			v3[i] = true;
		}else{
			dp[i] = asd;
		}
	}

	vector<int> ans;
	for(int i = n-1;i>=0;){
		if(v3[i]){
			ans.push_back(i+1);
			i = v2[i];
		}else{
			i--;
		}
	}
	reverse(ans.begin(),ans.end());

	cout<<dp[n-1]<<"\n"<<ans.size();
	for(int x:ans) cout<<" "<<x;
}
SubtaskSumTestVerdictTimeMemory
base55/55
1Accepted0/01ms316 KiB
2Accepted0/01ms316 KiB
3Accepted3/31ms316 KiB
4Accepted3/31ms316 KiB
5Accepted3/31ms316 KiB
6Accepted3/31ms316 KiB
7Accepted3/31ms316 KiB
8Accepted3/31ms508 KiB
9Accepted3/31ms316 KiB
10Accepted3/31ms556 KiB
11Accepted3/31ms508 KiB
12Accepted3/32ms316 KiB
13Accepted4/41ms316 KiB
14Accepted4/41ms316 KiB
15Accepted5/51ms508 KiB
16Accepted6/61ms404 KiB
17Accepted6/61ms316 KiB