Submission #1301284

#TimeUsernameProblemLanguageResultExecution timeMemory
1301284samarthkulkarniSolar Storm (NOI20_solarstorm)C++20
0 / 100
223 ms327680 KiB
#include <bits/stdc++.h>
using namespace std;

#define ll long long
#define vi vector<long long>
#define all(x) x.begin(), x.end()
#define endl "\n"
#define pr pair<ll, ll>
#define ff first
#define ss second

void solution();
int main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    solution();
    return 0;
}


const long long inf = 1e9;
const int N = 1e6+10;

ll a[N]{inf}, v[N];
ll n, s, k; 


pr pos(int i) {
	pr ans;
	ll p = 0, q = i;
	while (p <= q) {
		ll mid = (p + q)/2;
		if (a[i]-a[mid] <= k) q = mid-1;
		else {
			ans.ff = mid;
			p = mid+1;
		}
	}

	p = i, q = n+1;
	while (p <= q) {
		ll mid = (p + q)/2;
		if (a[mid]-a[i] <= k) p = mid+1;
		else {
			ans.ss = mid;
			q = mid-1;
		}
	}
	return ans;
}


ll cost(pr m) {
	m.ss--;
	return v[m.ss]-v[m.ff];
}


pr max(pr p1, pr p2) {
	if (p1.ff > p2.ff) return p1;
	return p2;
}

void solution() {
	cin >> n >> s >> k;

	for (int i = 2; i <= n; i++) {cin >> a[i]; a[i] += a[i-1];} 
	for (int i = 1; i <= n; i++) cin >> v[i];

	for (int i = 1; i <= n; i++) v[i] += v[i-1];
	a[n+1] = inf;
	
	

	vector<vi> dp(n+10, vi(s+10));
	vector<vector<pr>> best(n+10, vector<pr>(s+10));



	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= s; j++) {

			pr m = pos(i);
			ll c = cost(m) + best[m.ff][j-1].ff;
			dp[i][j] = c;

			best[m.ss-1][j] = max(best[m.ss-1][j], {dp[i][j], i});

		}
	}


	ll ans = 0, mx = 0;
	for (int i = 1; i <= n; i++) {
		if (mx < dp[i][s]) {
			ans = i;
			mx = dp[i][s];
		}
	}


	cout << 1 << endl;
	cout << ans << endl;	
		
	

}
#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...