57022023-09-09 17:40:22TomaSajtSípálya (55 pont)cpp17Elfogadva 55/5532ms12728 KiB
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

vector<ll> range_maxes(const vector<ll>& v, int k) {
  int n = v.size();
  vector<ll> res(n - k + 1);
  deque<int> dq;
  for (int i = 0; i < n; i++) {
    while (!dq.empty() && i - dq.front() >= k) dq.pop_front();
    while (!dq.empty() && v[dq.back()] <= v[i]) dq.pop_back();
    dq.push_back(i);
    if (i - k + 1 >= 0) {
      res[i - k + 1] = v[dq.front()];
    }
  }
  return res;
}

int main() {
  cin.tie(0), ios::sync_with_stdio(0);

  int n, k;
  cin >> n >> k;

  vector<ll> v(n);
  for (auto& a : v) cin >> a;
  for (int i = 0; i < n; i++) v[i] += i;  // add the index, so that we now need to make flat regions instead of stairs

  vector<ll> maxes = range_maxes(v, k);  // maxes[i]: max value in the i-th K length interval

  vector<ll> ps(n + 1);
  partial_sum(v.begin(), v.end(), ps.begin() + 1);

  ll best = LLONG_MAX;
  for (int i = 0; i <= n - k; i++) {
    ll sum = ps[i + k] - ps[i];  // sum of values in the i-th K length interval
    ll cost = k * maxes[i] - sum;
    best = min(best, cost);
  }
  cout << best;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base55/55
1Elfogadva0/03ms1824 KiB
2Elfogadva0/03ms2056 KiB
3Elfogadva2/23ms2280 KiB
4Elfogadva2/23ms2508 KiB
5Elfogadva2/23ms2464 KiB
6Elfogadva2/23ms2692 KiB
7Elfogadva3/33ms2908 KiB
8Elfogadva1/14ms3464 KiB
9Elfogadva1/14ms3572 KiB
10Elfogadva1/14ms3668 KiB
11Elfogadva1/14ms3792 KiB
12Elfogadva1/14ms3788 KiB
13Elfogadva1/14ms3652 KiB
14Elfogadva2/24ms3636 KiB
15Elfogadva2/24ms3668 KiB
16Elfogadva2/230ms12700 KiB
17Elfogadva2/229ms11200 KiB
18Elfogadva2/229ms11200 KiB
19Elfogadva3/329ms10452 KiB
20Elfogadva2/230ms12264 KiB
21Elfogadva2/230ms12660 KiB
22Elfogadva2/230ms12620 KiB
23Elfogadva2/232ms12728 KiB
24Elfogadva2/232ms12728 KiB
25Elfogadva2/230ms12332 KiB
26Elfogadva2/229ms12332 KiB
27Elfogadva2/230ms12336 KiB
28Elfogadva3/332ms12360 KiB
29Elfogadva3/330ms12352 KiB
30Elfogadva3/330ms12564 KiB