Advertisement
Serega

Maximum Absurdity

Jul 24th, 2013
7,306
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.01 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <vector>
  4. using namespace std;
  5.  
  6. inline __int64 get_sum(const vector<__int64> &sum, int l, int r)
  7. {
  8.     return (l == 0) ? sum[r] : (sum[r] - sum[l - 1]);
  9. }
  10.  
  11. int main()
  12. {
  13.     int n, k;
  14.     scanf("%d %d", &n, &k);
  15.     vector<__int64> a(n), sum(n);
  16.     scanf("%I64d", &a[0]);
  17.     sum[0] = a[0];
  18.     for (int i = 1; i < n; ++i)
  19.     {
  20.         scanf("%I64d", &a[i]);
  21.         sum[i] = sum[i - 1] + a[i];
  22.     }
  23.     pair<int, int> ans = make_pair(n - 2 * k, n - k);
  24.     __int64 ans_sum = get_sum(sum, n - 2 * k, n - k - 1) + get_sum(sum, n - k, n - 1);
  25.     pair<int, __int64> suff_max = make_pair(n - k, get_sum(sum, n - k, n - 1));
  26.     for (int i = n - 2 * k - 1; i >= 0; --i)
  27.     {
  28.         __int64 cur = get_sum(sum, i + k, i + 2  * k - 1);
  29.         if (cur >= suff_max.second)
  30.             suff_max = make_pair(i + k, cur);
  31.         cur = get_sum(sum, i, i + k - 1) + suff_max.second;
  32.         if (cur >= ans_sum)
  33.         {
  34.             ans_sum = cur;
  35.             ans = make_pair(i, suff_max.first);
  36.         }
  37.     }
  38.     printf("%d %d\n", ans.first + 1, ans.second + 1);
  39.     return 0;
  40. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement