#include <bits/stdc++.h> using namespace std; typedef long long LL; LL dp[300009]; LL t[300009]; LL d[300009]; int n, k, q; int main(){ ios_base::sync_with_stdio(false); cin>>n>>k>>q; for(int i=1; i<=n; i++){ cin>>t[i]; } LL sum = 0; for(int i=1; i<k; i++){ sum+=t[i]; } for(int i=k; i<=n; i++){ sum+=t[i]; d[i]=sum; sum-=t[i-k+1]; } for(int i=0; i<q; i++){ int l, r; cin>>l>>r; if(r-l+1 < k){ cout<<"0\n"; }else{ for(int i=l+k-1; i<=r; i++){ dp[i]=max(dp[i-1], dp[i-k]+d[i]); } cout<<dp[r]<<"\n"; for(int i=l+k-1; i<=r; i++){ dp[i]=0; } } } 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 | #include <bits/stdc++.h> using namespace std; typedef long long LL; LL dp[300009]; LL t[300009]; LL d[300009]; int n, k, q; int main(){ ios_base::sync_with_stdio(false); cin>>n>>k>>q; for(int i=1; i<=n; i++){ cin>>t[i]; } LL sum = 0; for(int i=1; i<k; i++){ sum+=t[i]; } for(int i=k; i<=n; i++){ sum+=t[i]; d[i]=sum; sum-=t[i-k+1]; } for(int i=0; i<q; i++){ int l, r; cin>>l>>r; if(r-l+1 < k){ cout<<"0\n"; }else{ for(int i=l+k-1; i<=r; i++){ dp[i]=max(dp[i-1], dp[i-k]+d[i]); } cout<<dp[r]<<"\n"; for(int i=l+k-1; i<=r; i++){ dp[i]=0; } } } return 0; } |