#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; } |