#include <iostream>
#include <cstdint>
#include <vector>
using namespace std;
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
uint32_t n,k,q;
cin>>n>>k>>q;
vector<int64_t> punkty(n+1), wartOdd(n+1,0);
for (uint32_t ii=1;ii<=n; ii++)
cin>>punkty[ii];
for (uint32_t ii=0; ii<=k; ii++)
wartOdd[k] +=punkty[ii];
for (uint32_t ii=k+1; ii<=n; ii++)
wartOdd[ii] = wartOdd[ii-1]+punkty[ii]-punkty[ii-k];
for (uint32_t test=0; test<q; test++)
{
uint32_t l,r;
cin>>l>>r;
// optymalizacja na przedziale [l,r]
if(r+1-l <k)
cout<<'0'<<endl;
else
{
vector<int64_t> rozw(n+1,0);
for (uint32_t ii=l+k-1; ii<=r; ii++)
{
rozw[ii] = max(rozw[ii-1], rozw[ii-k]+wartOdd[ii]);
}
cout<<rozw[r]<<endl;
}
}
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 | #include <iostream> #include <cstdint> #include <vector> using namespace std; int main() { ios_base::sync_with_stdio(0); cin.tie(0); uint32_t n,k,q; cin>>n>>k>>q; vector<int64_t> punkty(n+1), wartOdd(n+1,0); for (uint32_t ii=1;ii<=n; ii++) cin>>punkty[ii]; for (uint32_t ii=0; ii<=k; ii++) wartOdd[k] +=punkty[ii]; for (uint32_t ii=k+1; ii<=n; ii++) wartOdd[ii] = wartOdd[ii-1]+punkty[ii]-punkty[ii-k]; for (uint32_t test=0; test<q; test++) { uint32_t l,r; cin>>l>>r; // optymalizacja na przedziale [l,r] if(r+1-l <k) cout<<'0'<<endl; else { vector<int64_t> rozw(n+1,0); for (uint32_t ii=l+k-1; ii<=r; ii++) { rozw[ii] = max(rozw[ii-1], rozw[ii-k]+wartOdd[ii]); } cout<<rozw[r]<<endl; } } return 0; } |
English