170792025-05-20 18:43:33algoproAutózáscpp17Time limit exceeded 80/100300ms7936 KiB
// UUID: 98256ee1-5016-4635-ac20-fef57b06d81c
#include <bits/stdc++.h>
using namespace std;

int main() {
	int n, k;	cin>>n>>k;
	vector<pair<int, int>> a (n);
	vector<int> ne (n);
	vector<long long> dist(n+1);
	for(int i=0; i<n; i++){
		int x, y; cin>>x>>y;
		a[i]={y, x};
		dist[i+1]=dist[i]+a[i].second;
	}

	stack<pair<int, int>> s;
	s.push({-1, n});
	for(int i=n-1; i>=0; i--){
		while(s.top().first>=a[i].first){
			s.pop();
		}
		ne[i]=s.top().second;
		s.push({a[i].first, i});
	}

	vector<pair<int, int>> ans;
	long long p=0, t=0;

	for(int i=0; i<n; i++){
		if(i!=0) {t-=a[i-1].second;}
		if(dist[ne[i]]-dist[i]<=k){
			if(dist[ne[i]]-dist[i] >t){
				ans.push_back({i+1, dist[ne[i]]-dist[i]-t});
				p+=(dist[ne[i]]-dist[i]-t)*a[i].first;
				t=dist[ne[i]]-dist[i];
			}
		}
		else{
			if(dist[n]-dist[i]<=k){
				if (t>= dist[n]-dist[i]){break;}
				ans.push_back({i+1, dist[n]-dist[i]-t});
				p+=dist[n]-dist[i]-t;
				break;
			}
			ans.push_back({i+1, k-t});
			p+=(k-t)*a[i].first;
			t=k;
		}
	}

	cout<<p<<" "<<ans.size()<<endl;
	for(auto i: ans){
		cout<<i.first<<" "<<i.second<<endl;
	}
}
SubtaskSumTestVerdictTimeMemory
base80/100
1Accepted0/01ms500 KiB
2Accepted0/0143ms6196 KiB
3Accepted5/51ms316 KiB
4Accepted5/51ms316 KiB
5Accepted5/51ms380 KiB
6Accepted5/51ms316 KiB
7Accepted5/51ms316 KiB
8Accepted5/51ms316 KiB
9Accepted5/51ms316 KiB
10Accepted5/51ms316 KiB
11Accepted5/537ms1720 KiB
12Accepted5/559ms2356 KiB
13Accepted5/543ms2100 KiB
14Accepted5/586ms3892 KiB
15Accepted5/5194ms5152 KiB
16Accepted5/5190ms4780 KiB
17Accepted5/5195ms5056 KiB
18Accepted5/5187ms4780 KiB
19Time limit exceeded0/5282ms7336 KiB
20Time limit exceeded0/5284ms7336 KiB
21Time limit exceeded0/5300ms7848 KiB
22Time limit exceeded0/5300ms7936 KiB