#include <iostream>
#include <algorithm>
const int maxN = 300 * 1000 + 20;
int n;
int k;
long long a[maxN];
long long sum[maxN];
long long solution[maxN];
int l, r;
int q;
int main(){
std::cin >> n >> k >> q;
for(int i = 0; i < n; i++)
std::cin >> a[i];
sum[0] = 0;
for(int i = 1; i <= n; i++)
sum[i] = sum[i-1] + a[i-1];
for(int i = 0; i <= n - k; i++)
sum[i] = sum[i+k] - sum[i];
//for(int i = 0; i < n; i++)
// std::cout << sum[i] << " ";
//std::cout << "\n";
for(int _i = 0; _i < q; _i++){
std::cin >> l >> r;
l--;
r--;
for(int i = r; i > r+1-k; i--)
solution[i] = 0;
solution[r+1-k] = std::max((long long) 0, sum[r+1-k]);
for(int i = r-k; i >= l; i--){
solution[i] = std::max(
solution[i+1],
sum[i] + solution[i+k]
);
}
//for(int i = l; i <= r; i++)
// std::cout << solution[i] << " ";
//std::cout << "\n";
std::cout << solution[l] << "\n";
}
return 0;
}
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 | #include <iostream> #include <algorithm> const int maxN = 300 * 1000 + 20; int n; int k; long long a[maxN]; long long sum[maxN]; long long solution[maxN]; int l, r; int q; int main(){ std::cin >> n >> k >> q; for(int i = 0; i < n; i++) std::cin >> a[i]; sum[0] = 0; for(int i = 1; i <= n; i++) sum[i] = sum[i-1] + a[i-1]; for(int i = 0; i <= n - k; i++) sum[i] = sum[i+k] - sum[i]; //for(int i = 0; i < n; i++) // std::cout << sum[i] << " "; //std::cout << "\n"; for(int _i = 0; _i < q; _i++){ std::cin >> l >> r; l--; r--; for(int i = r; i > r+1-k; i--) solution[i] = 0; solution[r+1-k] = std::max((long long) 0, sum[r+1-k]); for(int i = r-k; i >= l; i--){ solution[i] = std::max( solution[i+1], sum[i] + solution[i+k] ); } //for(int i = l; i <= r; i++) // std::cout << solution[i] << " "; //std::cout << "\n"; std::cout << solution[l] << "\n"; } return 0; } |
English