#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]); } } |
English