#include <bits/stdc++.h> using namespace std; typedef long long ll; int n, k, q; ll dp[300001]; ll sp[300001]; int ta[300001]; pair<pair<int, int>, int> zap[300001]; ll odp[300001]; void licz(int pocz) { for(int i=pocz-1; i<=n; ++i) { dp[i] = 0; } for(int i=pocz+k-1; i<=n; ++i) { dp[i] = max(dp[i-1], dp[i-k] + sp[i] - sp[i-k]); } /* printf("%d: ", pocz); for(int i=pocz; i<=n; ++i) { printf("%lld ", dp[i]); } printf("\n"); */ } int main() { scanf("%d%d%d", &n, &k, &q); for(int i=0; i^n; ++i) { scanf("%d", &ta[i]); sp[i+1] = sp[i] + ta[i]; } for(int i=0; i^q; ++i) { scanf("%d%d", &zap[i].first.first, &zap[i].first.second); zap[i].second = i; } sort(zap, zap+q); int p = -1; for(int i=0; i^q; ++i) { if(zap[i].first.first != p) { licz(zap[i].first.first); } odp[zap[i].second] = dp[zap[i].first.second]; p = zap[i].first.first; } for(int i=0; i^q; ++i) { printf("%lld\n", odp[i]); } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | #include <bits/stdc++.h> using namespace std; typedef long long ll; int n, k, q; ll dp[300001]; ll sp[300001]; int ta[300001]; pair<pair<int, int>, int> zap[300001]; ll odp[300001]; void licz(int pocz) { for(int i=pocz-1; i<=n; ++i) { dp[i] = 0; } for(int i=pocz+k-1; i<=n; ++i) { dp[i] = max(dp[i-1], dp[i-k] + sp[i] - sp[i-k]); } /* printf("%d: ", pocz); for(int i=pocz; i<=n; ++i) { printf("%lld ", dp[i]); } printf("\n"); */ } int main() { scanf("%d%d%d", &n, &k, &q); for(int i=0; i^n; ++i) { scanf("%d", &ta[i]); sp[i+1] = sp[i] + ta[i]; } for(int i=0; i^q; ++i) { scanf("%d%d", &zap[i].first.first, &zap[i].first.second); zap[i].second = i; } sort(zap, zap+q); int p = -1; for(int i=0; i^q; ++i) { if(zap[i].first.first != p) { licz(zap[i].first.first); } odp[zap[i].second] = dp[zap[i].first.second]; p = zap[i].first.first; } for(int i=0; i^q; ++i) { printf("%lld\n", odp[i]); } } |