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